1. ホーム
  2. sql

[解決済み] text または ntext データ型に対する REPLACE の代替案

2022-09-05 13:11:35

質問

datatable.columnのデータを更新/置換する必要があります。このテーブルには Content . 私は REPLACE 関数を使用しています。カラムのデータ型が NTEXT であるため、SQL Server では、カラムのデータ型として REPLACE 関数を使用することができません。

このデータベースはサードパーティのソフトウェアテーブルなので、datatypeを変更することができないのです。データ型を変更すると、アプリケーションは失敗します。

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = REPLACE(Content,'ABC','DEF') 
WHERE Content LIKE '%ABC%' 

このようなエラーが発生します。

Msg 8116, レベル 16, ステート 1, ライン 1 replace関数の引数1の引数データ型ntextは無効です。

  • T-SQLで修正することは可能ですか?どなたか、読み込みとループの例をお持ちですか?
  • onetime変換なので、他の型に変更できるかもしれませんが、データがぐちゃぐちゃになりそうで怖いです。

主キーフィールド:name: ID - integer -があるので、IDなのですが・・・。なので、これも考えないといけないですね。IdentityをN一時的に設定するとか。

REPLACE関数を実現する方法をアドバイスしてください。

約3000のステートメントを新しいソリューションで更新する必要があります。

どのように解決するのですか?

IF あなたのデータは4000字を超えません。 AND SQL Server 2000 または互換性レベル 8 または SQL Server 2000 であること。

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = CAST(REPLACE(CAST(Content as NVarchar(4000)),'ABC','DEF') AS NText)
WHERE Content LIKE '%ABC%' 

SQL Server 2005+の場合。

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = CAST(REPLACE(CAST(Content as NVarchar(MAX)),'ABC','DEF') AS NText)
WHERE Content LIKE '%ABC%'