2009-03-12 29 views
5

私はntextフィールドを持つテーブルを持っています。それはvarbinary(max)に切り替えることを決めた私の特定のケースでカラムタイプをntextからvarbinary(max)に変更してください

ntext, text, and image data types will be removed in a future version of Microsoft SQL Server. Avoid using these data types in new development work, and plan to modify applications that currently use them. Use nvarchar(max), varchar(max), and varbinary(max) instead.

MSDNntextが非推奨となり、彼らは他のデータ型を示唆していることを述べています。私はテーブル定義を変更しようとしましたが、うまくいきませんでした。

ALTER TABLE MyTable ALTER COLUMN MyColumn VARBINARY(MAX); 

varbinary(max)の種類を変更する可能性は何ですか?ntext - >nvarchar(max)からnvarchar(max) - >varbinary(max)に変更しようとしましたが、これはできません(エラー:データ型nvarchar(max)からvarbinary(max)への暗黙的な変換はできません)。

唯一の解決策は、タイプvarbinary(max)の新しい列を追加し、既存の値を新しい列に変換してから、古い列を削除することです。これは非常に時間がかかります(約15GBのデータセットで約30分かかります)。だからこそ私は同じことを達成するための他の可能性を調査しているのです(おそらく、データと変換を動かすことなく)。

答えて

3

あなたのntext列にテキストデータがないため、varbinary(max)を使用したとしますか?その場合は、別のvarbinary(max)列をテーブルに追加してから、ntextから新しい列にコピーする変換操作を実行する必要があると思います。次に、古い列を削除し、新しい列の名前を古い名前に変更します。

"データ型nvarchar(max)からvarbinary(max)への暗黙的な変換は許可されていません"は、変換について明示する必要があることを意味します。

+0

ええ、私はその列にテキストを圧縮しました。 –

+0

ありがとうございました。私たちは変換を実行する必要がありますね。 –

0

この変換はある時点で実行する必要があるようです。検索すると、多くの人がテキストからvarchar(max)に移動し、変換に20 +分かかることがわかります。私の2セントは数分間研究したので、それを福音として受け取らないでください。

テーブルに挿入するだけであれば、保持テーブルの既存のデータを変換してから、テーブルの名前を変更して保持することができます。その後、ダウンタイム中に新しく作成されたデータを古いテーブルから移動します。

更新プログラムを処理すると、もちろん複雑になります。

+0

ありがとうございました。うん、あなたはおそらく正しいでしょう。私はこれを行う別の方法があることを望んでいた。ありがとう。 –

0

余分な列を追加するのがおそらく最善の方法です。 私は、

  1. があなたのレジャーでは、両方の列
  2. を移入するためにあなたの挿入コードを変更
  3. nullとして、列のvarbinary(max)を追加リスク、一晩言う削減するための手順で実行をこの種のものをやって好みますCAST
  4. 新しい列を確保、古い列のすべてのコードのサポートを削除してUPDATE文が読まれ
  5. 古い列を削除して、
0を必要に応じて非nullにする新しい列を変更します
+0

ありがとうございました。これは私が現在持っているものです。私は代わりを探していたが、誰もいないと思う。 –

関連する問題