• ベストアンサー

SQL SERVER 2005 にて全テーブルの文字列を置換する方法を

SQL SERVER 2005 にて全テーブルの文字列を置換する方法を探しています。 ものすごく基礎的なことでしたら申し訳ございません。 SQL SERVER 2005で作成したDBがあるのですが、この中の全てのテーブル内を検索し、 「AAA」という文字列を「BBB」に置換したいと考えています。 上記は例えですが、とにかく全てのテーブル内の全ての文字列を検索し、置換できる方法は無いでしょうか。 どうかご教示のほど、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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

makademi
質問者

お礼

ありがとうございました!! 無事変換できました!!! 中のロジックなどはまだ理解できておりませんが、勉強させていただきます。 大変助かりました。