- ベストアンサー
SQL SERVER 2005 にて全テーブルの文字列を置換する方法を
SQL SERVER 2005 にて全テーブルの文字列を置換する方法を探しています。 ものすごく基礎的なことでしたら申し訳ございません。 SQL SERVER 2005で作成したDBがあるのですが、この中の全てのテーブル内を検索し、 「AAA」という文字列を「BBB」に置換したいと考えています。 上記は例えですが、とにかく全てのテーブル内の全ての文字列を検索し、置換できる方法は無いでしょうか。 どうかご教示のほど、よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
エラー処理などは入れておりません。 置換対象のDBは、実行する場所に依存しております。 実行は読み出し例: ---------------------------------------------------- EXEC 全置換 '検索文字列','置換文字列' ---------------------------------------------------- このコードは全角スペースを利用しています。 「全角スペース1個」→「半角スペース2個」に置き換えて利用してください。 CREATE PROCEDURE 全置換 ( @検索文字 AS NVARCHAR(MAX), @置換文字 AS NVARCHAR(MAX) ) AS BEGIN DECLARE @tbl SYSNAME DECLARE @col SYSNAME DECLARE cur CURSOR FOR SELECT A.name AS TBL,B.name AS COL FROM SYS.TABLES A INNER JOIN Sys.Columns B ON A.object_id = B.object_id ORDER BY A.name, B.column_id OPEN cur FETCH cur INTO @tbl,@col WHILE @@FETCH_STATUS=0 BEGIN DECLARE @prm NVARCHAR(MAX) SET @prm = '@find NVARCHAR(MAX), @rep NVARCHAR(MAX)' DECLARE @sql NVARCHAR(MAX) SET @sql = 'UPDATE ' + @tbl + ' SET ' SET @sql = @sql + '[' + @col + '] = REPLACE([' + @col + '], @find, @rep) ' SET @sql = @sql + 'WHERE [' + @col + '] LIKE ''%'' + @find + ''%''' EXECUTE sp_executesql @sql, @prm, @find=@検索文字, @rep=@置換文字 FETCH cur INTO @tbl,@col END CLOSE cur DEALLOCATE cur END
お礼
ありがとうございました!! 無事変換できました!!! 中のロジックなどはまだ理解できておりませんが、勉強させていただきます。 大変助かりました。