问题描述
我想创建一个应该有超过 1024 列的表类型。所以我尝试通过创建一个 - SpecialPurposeColumns XML COLUMN_SET 来使用稀疏列,如下所示。那没有用。它给了我一个错误:'COLUMN_SET'附近的语法不正确
CREATE TYPE dbo.TempTable AS TABLE (
ID INT IDENTITY(1,1),SpecialPurposeColumns XML COLUMN_SET FOR ALL_SPARSE_COLUMNS,col1 VARCHAR(10) SPARSE NULL,col2 VARCHAR(10) SPARSE NULL,.
.
col1025 VARCHAR(10) SPARSE NULL);
有什么办法可以创建一个可以超过 1024 列的表类型吗?
解决方法
来自Restrictions for Using Sparse Columns:
使用稀疏列的限制
稀疏列可以是任何 SQL Server 数据类型,其行为与任何其他列一样,但具有以下限制:
- ...
- 稀疏列不能是用户定义的表类型的一部分,用于表变量和表值参数。
因此您不能在表类型对象中使用 SPARSE
列。
至于超过 1,024 列,同样,不,你不能。来自Maximum capacity specifications for SQL Server:
数据库引擎对象
在 SQL Server 数据库中定义或在 Transact-SQL 语句中引用的各种对象的最大大小和数量。
SQL Server 数据库引擎对象 | 最大大小/数量 SQL Server(64 位) | 附加信息 |
---|---|---|
每表的列数 | 1,024 | 包含稀疏列集的表最多包含 30,000 列。见sparse column sets。 |
显然,“查看稀疏列集”在这里不相关,因为它们不受支持(如上所述)。
但是,如果您“需要”这么多列,那么您很可能确实存在设计缺陷;可能遭受严重的非规范化。