まず、ntext フィールドを nvarchar(max) に置き換えるようお願いする必要があります。ntext は問題です
マイクロソフトからの引用
「ntext、text、および image データ型は、Microsoft SQL Server の将来のバージョンで削除されます。新しい開発作業でこれらのデータ型を使用することは避け、現在それらを使用しているアプリケーションを変更することを計画してください。nvarchar(max)、varchar(max) を使用してください。 )、代わりに varbinary(max) を使用します。
大規模な非 Unicode および Unicode 文字列とバイナリ データを格納するための固定長および可変長のデータ型。Unicode データは UNICODE UCS-2 文字セットを使用します。" 引用終了
データ型を変更する方法は次のとおりです。
alter table yourtable ALTER COLUMN colname varchar(max)
すべての表と列で説明したように、テキストを置き換えるスクリプトを次に示します。TABLE に計算列がある場合、スクリプトは少し泣き言を言いますが、それでも実行されます。
DECLARE @searchvalue varchar(100)
DECLARE @newvalue varchar(100)
DECLARE @newvalueShort varchar(50)
SET nocount off
SET @searchvalue = 'replace text'
SET @newvalue = 'new long text replacement'
SET @newvalueShort = 'short text'
SELECT * into #t FROM
(
SELECT 'update [' + a.TABLE_name + ']
SET ['+ column_name+ ']=replace(' +column_name +','''+@searchvalue +''','''+ case when character_maximum_length > 50 then @newvalue else @newvalueShort end + ''')
where [' +a.column_name+
'] like ''%'+@searchvalue +'%''' sqlstring
FROM INFORMATION_SCHEMA.COLUMNS a
join
INFORMATION_SCHEMA.TABLES b
ON a.TABLE_name = b.TABLE_name
and b.TABLE_type = 'base TABLE'
WHERE data_type in ('varchar', 'char', 'nchar', 'nvarchar')
and character_maximum_length >= len(@newvalueShort)
) a
DECLARE @sqlstring as nvarchar(500)
DECLARE SqlCursor CURSOR FAST_FORWARD FOR
SELECT sqlstring FROM #t
OPEN SqlCursor
FETCH NEXT FROM SqlCursor
INTO @sqlstring
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC(@sqlstring)
FETCH NEXT FROM SqlCursor
INTO @sqlstring
END
CLOSE SqlCursor
DEALLOCATE SqlCursor
DROP TABLE #t