SQL Server 2008最大列数和行最大大小

时间:2011-12-20 11:58:09

标签: sql-server-2008

使用SQL Server 2008,我试图在表格中插入超过1024列。

我尝试使用SPARSE列,但是我遇到了行8k的最大大小的另一个问题,行大小也超过了这个边界。

我还读到我们不能对SPARSE列使用行压缩。

我经常搜索,但直到现在我还没有得到解决方案。

任何人都可以提供帮助

由于

2 个答案:

答案 0 :(得分:1)

由于行大小,1024通常是非宽表中总列数的a correct limitation,正如您在问题中指出的那样。

解决方法是使用所谓的wide tables。诀窍在于,不是列,而是使用所谓的column sets来定义列。因此,您可以将总列数增加到30'000。

修改

在我原来的回答中,我以某种方式丢弃了你问题的重要部分,即你已经对行大小有问题,而不是列号。这意味着,您的稀疏列不够“稀疏”。解决问题的唯一方法是对数据进行垂直分区,例如:将你的大桌分成两个或三个较小的桌子......

答案 1 :(得分:0)

不会观察到你的数据库架构已经很好的情况......

  1. 您无法创建超过1024个非稀疏列的表
  2. 您可以使用后续更新来获得超过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