SQL Serverでnvarchar(max)vs NTextデータ型を使用する利点と欠点は何ですか?下位互換性は必要ないためnvarchar(max)、以前のSQL Serverリリースではサポートされていません。
編集:どうやら質問にもに適用TEXTし、IMAGE対varchar(max)とvarbinary(max)後でそれらのデータ・タイプのものの検索のために、。
SQL Serverでnvarchar(max)vs NTextデータ型を使用する利点と欠点は何ですか?下位互換性は必要ないためnvarchar(max)、以前のSQL Serverリリースではサポートされていません。
編集:どうやら質問にもに適用TEXTし、IMAGE対varchar(max)とvarbinary(max)後でそれらのデータ・タイプのものの検索のために、。
回答:
利点は、あなたのような機能を使用することができますLENし、LEFT上nvarchar(max)、あなたはその反対を行うことはできませんntextとtext。また、やを使用する必要があった場所nvarchar(max)よりも作業が簡単textです。WRITETEXTUPDATETEXT
また、text、ntext、など、推奨されている(http://msdn.microsoft.com/en-us/library/ms187993.aspx)
nvarchar(max)あなたが使いたいものです。最大の利点は、このデータ型ですべてのT-SQL文字列関数を使用できることです。これは、では不可能ntextです。本当の不利な点は知りません。
nvarchar(max)、それは私を4000文字に制限します。それ以上のフィールドを保持したい場合はどうなりますか?
nvarchar(max)4000文字に制限されています。したがって、SQL Server Compactでは、ntext場合によっては使用するしかありません。彼らがそれをやめたとき、私はいくつかのサイトをアップグレードする必要がないだけだと思います。
あなたは明らかに使用する必要がありますnvarchar(max):
Text(NTextおよびとともにImage)の最大の欠点は、ドキュメントのように、SQL Serverの将来のバージョンで削除されることです。これにより、SQL Serverのそのバージョンがリリースされるときに、スキーマのアップグレードが事実上困難になります。
変換の私の経験を追加したかったです。text古代のLinq2SQLコードには多くのフィールドがありました。これはtext、インデックスに存在する列をONLINEで再構築できるようにするためです。
最初に私は長年の利点について知っていましたが、常に変換がSQL Serverがテーブルを再構築してすべてをコピーしなければならない恐ろしい長いクエリを意味し、私のWebサイトを停止し、心拍数を上げると常に想定していました。
また、Linq2SQLが列タイプのなんらかの検証を行っている場合にエラーが発生する可能性があることも心配しました。
ただし、ALTERコマンドが即座に返されたことを報告できて嬉しいです。そのため、これらのコマンドは間違いなくテーブルのメタデータのみを変更しています。8000文字未満のデータをテーブルに戻すためにオフライン作業が発生している可能性がありますが、ALTERコマンドは瞬時に実行されました。
次のコマンドを実行して、変換が必要なすべての列を見つけました。
SELECT concat('ALTER TABLE dbo.[', table_name, '] ALTER COLUMN [', column_name, '] VARCHAR(MAX)'), table_name, column_name
FROM information_schema.columns where data_type = 'TEXT' order by table_name, column_name
SELECT concat('ALTER TABLE dbo.[', table_name, '] ALTER COLUMN [', column_name, '] NVARCHAR(MAX)'), table_name, column_name
FROM information_schema.columns where data_type = 'NTEXT' order by table_name, column_name
これにより、クエリの一覧が表示され、選択して新しいウィンドウにコピーしました。私が言ったように-これを実行することは瞬時でした。
Linq2SQLはかなり古くからあり、テーブルをドラッグするデザイナーを使用しています。最初の状況はEFコードの方が複雑かもしれませんが、私はまだそれに取り組んでいません。