Невозможно создать строку размером 8064, которая больше допустимого размера строки 8060 - PullRequest
4 голосов
/ 25 января 2010

У меня странная проблема при добавлении столбца в существующую таблицу.

Существующая таблица выглядит так:

CREATE TABLE [BinaryAssets].[BinaryAssets](
 [BinaryAssetId] [int] IDENTITY(1,1) NOT NULL,
 [BinaryAssetStructureId] [int] NOT NULL,
 [Name] [nvarchar](max) NOT NULL,
 [Created_By] [int] NOT NULL,
 [Created_On] [bigint] NOT NULL,
 [Modified_By] [int] NOT NULL,
 [Modified_On] [bigint] NOT NULL,
 [Active] [bit] NOT NULL,
 CONSTRAINT [PK_BinaryAsset] PRIMARY KEY NONCLUSTERED 
(
 [BinaryAssetId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,
   ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

Теперь sql, который я пытаюсь выполнить, выглядит так:

ALTER TABLE BinaryAssets.BinaryAssets ADD
 [Version] INT NOT NULL CONSTRAINT DF_BinaryAssets_Version DEFAULT 1

ALTER TABLE BinaryAssets.BinaryAssets
 DROP CONSTRAINT DF_BinaryAssets_Version

Когда я пытаюсь выполнить, я получаю sqlexception (см. Заголовок).

Теперь я не думаю, что мой стол превышает 8060, так в чем здесь проблема. Странно то, что когда я изменяю, например, Имя с nvarchar (max) на nvarchar (100), затем выполняю новый sql и затем возвращаю 100 к MAX, это работает ... логика кажется далеко здесь *

Кто-нибудь может сказать мне, что я здесь не так делаю?

Ответы [ 3 ]

4 голосов
/ 25 января 2010

Установите для параметра sp_tableoption хранимая процедура 'large value types out of row' значение ВКЛ, чтобы сохранить поле вне страницы.

2 голосов
/ 25 января 2010

Самый большой размер, который вы можете задать для поля nvarchar, равен MAX, что составляет 4000 символов (2 байта символов Unicode).

В SQL Server 2000 и SQL Server 7 Размер строки не может превышать 8000 байт. Это означает, что столбец VARBINARY может хранить только 8000 байт (при условии, что это единственный столбец в таблице), VARCHAR столбец может хранить до 8000 символов и столбец NVARCHAR может хранить до 4000 символов (2 байта на юникод персонаж). Это ограничение проистекает из внутренний размер страницы 8 КБ SQL Server используется для сохранения данных на диск.

Если вам нужно сохранить более длинный текст, вы должны использовать либо text, либо ntext, который может содержать столько текста, сколько у вашей системы достаточно места на жестком диске.

Похоже, вы пытаетесь создать строку размером больше , чем возможный размер, что недопустимо.

1 голос
/ 25 января 2010

В SQL Server 2005/2008 размер страницы такой же (8 КБ), но база данных использует указатели на строке на странице, чтобы указывать на другие страницы, которые содержат большие поля. Это позволяет 2005 году преодолеть ограничение размера строки 8 КБ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...