使用SQL Server 2008,我试图在表格中插入超过1024列。
我尝试使用SPARSE列,但是我遇到了行8k的最大大小的另一个问题,行大小也超过了这个边界。
我还读到我们不能对SPARSE列使用行压缩。
我经常搜索,但直到现在我还没有得到解决方案。
任何人都可以提供帮助
由于
答案 0 :(得分:1)
由于行大小,1024通常是非宽表中总列数的a correct limitation,正如您在问题中指出的那样。
解决方法是使用所谓的wide tables。诀窍在于,不是列,而是使用所谓的column sets来定义列。因此,您可以将总列数增加到30'000。
修改强>:
在我原来的回答中,我以某种方式丢弃了你问题的重要部分,即你已经对行大小有问题,而不是列号。这意味着,您的稀疏列不够“稀疏”。解决问题的唯一方法是对数据进行垂直分区,例如:将你的大桌分成两个或三个较小的桌子......
答案 1 :(得分:0)
不会观察到你的数据库架构已经很好的情况......
您可以使用后续更新来获得超过8k的数据 具有不同列集的同一行,如下例
CREATE TABLE dbo.temp
(
Id INT IDENTITY PRIMARY KEY,
varchar1 VARCHAR(8000) NULL,
varchar2 VARCHAR(8000) NULL,
varchar3 VARCHAR(8000) NULL,
varchar4 VARCHAR(8000) NULL,
varchar5 VARCHAR(8000) NULL
)
GO
INSERT INTO dbo.temp DEFAULT VALUES --just to get an Id
DECLARE @Id INT = SCOPE_IDENTITY()
UPDATE dbo.temp SET
varchar1 = REPLICATE('1', 8000)
WHERE Id = @Id
UPDATE dbo.temp SET
varchar2 = REPLICATE('2', 8000)
WHERE Id = @Id
UPDATE dbo.temp SET
varchar3 = REPLICATE('3', 8000)
WHERE Id = @Id
UPDATE dbo.temp SET
varchar4 = REPLICATE('4', 8000)
WHERE Id = @Id
UPDATE dbo.temp SET
varchar5 = REPLICATE('5', 8000)
WHERE Id = @Id