dポイントプレゼントキャンペーン実施中!

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

ものすごく基礎的なことでしたら申し訳ございません。
SQL SERVER 2005で作成したDBがあるのですが、この中の全てのテーブル内を検索し、
「AAA」という文字列を「BBB」に置換したいと考えています。

上記は例えですが、とにかく全てのテーブル内の全ての文字列を検索し、置換できる方法は無いでしょうか。

どうかご教示のほど、よろしくお願いいたします。

A 回答 (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
    • good
    • 0
この回答へのお礼

ありがとうございました!! 無事変換できました!!!

中のロジックなどはまだ理解できておりませんが、勉強させていただきます。
大変助かりました。

お礼日時:2010/05/21 17:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す