Могу ли я установить размер VARCHAR больше 8k, но меньше, чем MAX? - PullRequest
5 голосов
/ 26 февраля 2010

Начиная с SQL 2005, VARCHAR (MAX) больше не ограничен 8000 байтами, вместо этого он может занимать до 2 ГБ, используя страницы «переполнения».

Но что, если я хочу ограничить этот столбец 10 килобайтами? Кажется, я получаю сообщение об ошибке, если я пытаюсь поместить что-либо в параметр размера выше 8000. Это странно, потому что MAX - это то же самое, что запрашивать ограничение в 2 ГБ. Похоже, это своего рода «все или ничего», когда речь заходит о максимальном размере.

Есть ли способ обойти это?

Ответы [ 3 ]

12 голосов
/ 26 февраля 2010

Можно, но для этого необходимо реализовать ограничение CHECK:

CHECK (DATALENGTH([VarChar10000]) <= 10000)

Справка:

8 голосов
/ 26 февраля 2010

Нет, вы не можете. либо varchar (<= 8000), либо varchar (MAX), ничего между ними. </p>

Вы можете сделать это, хотя:

CREATE TABLE [dbo].[VarChar10000] ( [VarChar10000] VARCHAR(MAX) )
GO

ALTER TABLE [dbo].[VarChar10000] 
    ADD CONSTRAINT [MaxLength10000]
    CHECK (DATALENGTH([VarChar10000]) <= 10000)
GO

Отметьте здесь .

3 голосов
/ 26 февраля 2010

Нет, вы не можете сделать это [напрямую]. Это либо 0-8000, либо МАКС.

Попытка использования, скажем, 10000 даст:

The size (10000) given to the type 'varchar' exceeds the maximum allowed for any data type (8000).

Однако вы можете использовать столбец VARCHAR (MAX) с ограничением CHECK. Что-то вроде:

CHECK (DATALENGTH([myBigColumn]) <= 10000)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...