Преобразование ntext в nvcharmax (max) - обойти ограничение размера - PullRequest
14 голосов
/ 17 января 2011

Я пытаюсь изменить существующий столбец SQL NText на nvcharmax (max) , и обнаружил ошибку ограничения размера. Существует большое количество существующих данных, некоторые из которых, я полагаю, превышают предел в 8 КБ.

Мы собираемся преобразовать это, чтобы поле можно было искать в LINQ.

2x SQL-выражения, которые я пробовал:

update Table
set dataNVarChar = convert(nvarchar(max), dataNtext)
where dataNtext is not null

update Table
set dataNVarChar = cast(dataNtext as nvarchar(max))
where dataNtext is not null

И ошибка, которую я получаю:

Cannot create a row of size 8086 which is greater than the allowable maximum row size of 8060.

Это использует SQL Server 2008.

Любая помощь приветствуется, Спасибо.


Обновление / Решение:

Помеченный ответ ниже является правильным, и SQL 2008 может изменить столбец на правильный тип данных в моей ситуации, и нет никаких драм с приложением, использующим LINQ, которое мы используем поверх него:

alter table [TBL] alter column [COL] nvarchar(max)

Мне также посоветовали дополнить его:

update [TBL] set [COL] = [COL]

Что завершает преобразование, перемещая данные из структуры lob в таблицу (если длина меньше 8 КБ), что повышает производительность / поддерживает правильность работы.

1 Ответ

16 голосов
/ 17 января 2011

Это наиболее вероятно, потому что столбец dataNVarChar не определен как NVARCHAR (макс.) Чтобы преобразовать столбец из NTEXT в NVARCHAR (MAX), используйте это

alter table TBL alter column COL nvarchar(max)

Одновременно будет выполнено преобразование данных в столбце для вас

...