我有一个表,其中包含一个 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 的行。
谁能解释一下数字?
谢谢