1

我有一个表,其中包含一个 pk 列(bigint)、一个非稀疏 bigint、30 k 稀疏列(20 k 位、5 k int、5 k nvarchar(255))和一个列集。

当我尝试使用 '.' 更新 nvarchar 列时 在该列当前包含 null 的行中,我得到:

“无法创建大小为 8028 的稀疏数据大于允许的最大稀疏数据大小 8023 的行。”

当我总结这一行的非空列中的数据时,我得到

a) << 8023 字节,当使用每比特 0.125、每 int 4 和每 nvarchar 2 + datalength(..) 时。

我得到

b) >> 8023,当使用每比特 5、每 int 8 和每 nvarchar 4 + datalength(..) 时。

所以 b) 中每列的字节数不能是 sql server 用来计算最大值 8023 的字节数。

所以我现在很困惑为什么 sql server 说该行已满。

这是 sql server 2012 中的(已知)错误吗?

谢谢

现在我尝试了:

create table sparsetable (
 id bigint identity primary key
 , dummy1 nchar(4000) sparse
 , dummy2 nchar(4000) sparse
 , dummy3 nchar(4000) sparse
 , b1 bit sparse
 , b2 bit sparse
 , b3 bit sparse
 , b4 bit sparse
 , b5 bit sparse

 , i1 int sparse
 , i2 int sparse
 , i3 int sparse
 , i4 int sparse
 , i5 int sparse

 , v1 nvarchar(255) sparse
 , v2 nvarchar(255) sparse
 , v3 nvarchar(255) sparse
 , v4 nvarchar(255) sparse
 , v5 nvarchar(255) sparse
 )

insert into sparsetable (dummy1, b1, i1, v1) values ('x', 1, 1, '123') -- 无法创建具有大小为 8054 的稀疏数据大于允许的最大稀疏数据大小的行8019。

insert into sparsetable (dummy1, b1, i1) values ('x', 1, 1) -- 无法创建大小为 8042 的稀疏数据大于允许的最大稀疏数据大小 8019 的行。

insert into sparsetable (dummy1, b1) values ('x', 1) -- 无法创建大小为 8032 的稀疏数据大于允许的最大稀疏数据大小 8019 的行。

谁能解释一下数字?

谢谢

4

0 回答 0