textまたはntextデータ型のREPLACEの代替


101

datatable.columnのデータを更新/置換する必要があります。テーブルにはという名前のフィールドがありますContentREPLACE関数を使用しています。列のデータ型がであるためNTEXT、SQL ServerではREPLACE関数を使用できません。

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

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

私はこのエラーを受け取ります:

メッセージ8116、レベル16、状態1、行1引数データ型ntextは、置換関数の引数1では無効です。

  • T-SQLでこれを修正できますか?誰かが読んでループする方法の例はありますか?
  • これは1回限りの変換であるため、別のタイプに変更できる可能性がありますが、データをめちゃくちゃにしているようです。

主キーフィールドがあります:名前:ID-整数-これはIDです...だから私もこれについて考える必要があります。Identityを一時的にNに設定している可能性があります。

REPLACE機能の実現方法について教えてください。

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


これはSQL Server 2000ですか?
p.campbell 2010

回答:SQL2008を使用しています...データベースには互換性レベル2000(80)があります。これも2008年に変更した場合、機能しますか?結果はまだわからないので、互換性レベル2000のままにしましたが、これはSQL 2008データベースです。これは1時間変換...である
ethem

回答:


197

IFあなたのデータは、4000文字オーバーフローではないだろう、あなたは、SQL Server 2000または2000年8またはSQL Serverの互換性レベルにしています:

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%' 

3
簡単な質問ですが、2番目のキャストはNText本当に必要ですか?に割り当てると自動的にキャストさNVarchar(MAX)れると思いますNText
Tahir Hassan、

3
非常に簡単な修正。2005+ nvarchar(max)には4000文字の制限がないことに注意してください。私にはそれが自明であることはわかっていますが、最初は、両方の答えにその制限があるかのように読みました。
goodeye '17年

16

SQL Server 2000を想定すると、次のStackOverflowの質問で問題に対処できます。

SQL Server 2005/2008を使用している場合は、次のコードを使用できます(ここから取得)。

select cast(replace(cast(myntext as nvarchar(max)),'find','replace') as ntext)
from myntexttable
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.