web-dev-qa-db-ja.com

ntextをnvcharmax(max)に変換する-サイズ制限を回避する

既存のSQL NText列をnvcharmax(max)に変更しようとしていますが、サイズ制限でエラーが発生します。大量の既存のデータがあり、そのうちのいくつかは8kの制限を超えていると私は信じています。

LINQでフィールドを検索できるように、これを変換しようとしています。

私が試した2xSQLステートメントは次のとおりです。

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.

これはSQLServer2008を使用しています。

助けてくれてありがとう。


更新/解決策:

以下のマークされた答えは正解であり、SQL 2008は私の状況で列を正しいデータ型に変更でき、その上で使用するLINQを利用するアプリケーションにはドラマはありません。

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

私はまたそれをフォローアップするようにアドバイスされました:

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

これにより、データをlob構造からテーブルに移動して変換が完了し(長さが8k未満の場合)、パフォーマンスが向上し、適切に保たれます。

15
Overflew

これは、列dataNVarCharがNVARCHAR(max)として定義されていないことが原因である可能性があります。列をNTEXTからNVARCHAR(MAX)に変換するには、これを使用します。

alter table TBL alter column COL nvarchar(max)

同時に列のデータの変換を実行します

17
RichardTheKiwi