次のSQLクエリを理解する必要があります。誰かが詳細に(xmlパスのように)もう少し詳しく説明できるかどうかを尋ねたいと思います置き換え要素で? だから私はすべての値をBlaBlaBlaBlaで見つけて、代わりにHaHaHaHaで置き換えたいと思っています。現時点では、クエリはBlaBlaBlaBlaのすべての値のみを検索しています。sql-query、この特定のコードを検索して置き換えます
DECLARE @searchstring NVARCHAR(255)
SET @searchstring = '%BlaBlaBlaBla%'
DECLARE @sql NVARCHAR(max)
SELECT @sql = STUFF((
SELECT
' UNION ALL SELECT ''' + TABLE_SCHEMA + '.' + TABLE_NAME + ''' AS tbl, ''' + COLUMN_NAME + ''' AS col, [' + COLUMN_NAME + '] AS val' +
' FROM [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] WHERE [' + COLUMN_NAME + '] LIKE ''' + @searchstring + ''''
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE in ('nvarchar', 'varchar', 'char', 'ntext') FOR XML PATH('')) ,1, 11, '')
Exec (@sql)
ご協力いただきありがとうございます。 選択したすべてのテーブルのすべての値が選択されていますか?どこでもこの価値を見いだし、それを何か他のものに置き換えると言う簡単な方法はありますか? 多分私がしたいのは、どこにでも値を置き換えるだけなら、XMLパスは過剰です。 "最後に、更新したくない追加データを簡単に更新する可能性があることに注意してください。" 123 "を" 456 "に更新しようとすると、" My ID is 1234 "は「My ID is 4564」となる予定です。 - これは私が欲しいものです。 – Johan
'EXEC(@sql)'を 'SELECT @ sql'に置き換えて、どのようにコードが動作するかを知るために返すものを見てください。データベース内のすべての文字列を取得し、それぞれの文字列を検索して置き換えるための更新を生成しています。私の頭の上からちょうど離れて、非常に非効率になるだろう。なぜなら、テーブルに3つの文字列があると、3つの更新ステートメントが実行され、それらのすべてが完全なテーブルスキャンを行わなければならないからです。 –