Максимальный размер столбцов и строк в SQL Server 2008 - PullRequest
0 голосов
/ 20 декабря 2011

При использовании SQL Server 2008 я пытаюсь вставить в таблицу более 1024 столбцов.

Я попытался использовать столбец SPARSE, но у меня возникла другая проблема с максимальным размером строки 8k, который также превышает размер этой границы.

Я также читал, что мы не можем использовать сжатие строк со столбцом SPARSE.

Я много искал, но на самом деле до сих пор не нашел решения.

Любой может помочь

Спасибо

Ответы [ 2 ]

1 голос
/ 20 декабря 2011

1024 - это правильное ограничение от общего числа столбцов в обычной неширокой таблице, которое связано с размером строки, как вы сами указали в своем вопросе.

Обходной путь - использовать так называемые таблицы шириной .Хитрость заключается в том, что вместо столбцов для определения столбцов используются так называемые наборы столбцов .Таким образом, вы можете увеличить общее количество столбцов до 30 000.

РЕДАКТИРОВАТЬ :

В своем первоначальном ответе я как-то отбросил важную часть вашего вопроса, а именно:у вас уже есть проблемы с размером строки, а не с номерами столбцов.Это означает, что ваши разреженные столбцы недостаточно "разрежены".Единственный способ справиться с этой проблемой - это вертикальное разбиение ваших данных, например, разбить вашу большую таблицу на две или три меньшие таблицы ...

0 голосов
/ 20 декабря 2011

Не будет наблюдаться случай, когда ваша схема БД будет исправна ...

  1. Невозможно создать таблицу с более чем 1024 не разреженными столбцами
  2. Вы можете иметь более 8 тыс. Данных в строке, используя последовательные обновления одной и той же строки с различными наборами столбцов, как в следующем примере

    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
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...