我有一个表有一个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个数据长度(..)。
我得到了
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
)
插入sparsetable(dummy1,b1,i1,v1)值('x',1,1,'123') - 无法创建一个大小为8054的稀疏数据的行,该行大于允许的最大稀疏数数据大小为8019。
插入sparsetable(dummy1,b1,i1)值('x',1,1) - 无法创建一个大小为8042的稀疏数据的行,该行大于允许的最大稀疏数据大小8019。 / p>
插入sparsetable(dummy1,b1)值('x',1) - 无法创建一个大小为8032的稀疏数据的行,该行大于允许的最大稀疏数据大小8019。
有人可以解释这些数字吗?
谢谢