
こんばんわ。
SQLServer2008にて1データベース内の全ストアドを対象に、
ストアドプロシージャ記述内で特定の文字列を検索し、置換する方法を考えています。
以下のようなsqlで、ストアド内に文字列があるものを検索することはできたのですが、
ここから先、「★★★」を「○○○」にREPLACEする方法がわかりません。
select routine_name from information_schema.routines
where routine_definition LIKE '%★★★%'
and routine_type='procedure'
以下のようなsqlで更新しようとしたら、エラーが発生しました。
update information_schema.routines set
routine_definition = REPLACE(routine_definition, '★★★', '○○○')
where routine_name = 'XXX'
(error:システム カタログへのアドホック更新は許可されません。)
不定期にデータベース名を変更することがあり、ストアドの数が多いため、
一括で変換できる方法がないかと探しています。
手作業で変更していく他ないでしょうか。
なにかヒントだけでもご教示いただけると嬉しいです。
よろしくお願いします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
information_schemaの中身はシステムの情報なのでupdate文なんかで変えちゃいけません。
・・・不整合が起こってシステムが異常な動作をしても知りませんよ、って内容なので。
で、エラーになるんでしょう。
routine_definitionだけテキストファイルに出力して、メモ帳かなにかで
「CRAEATE PROCEDURE 」を「ALTER PROCEDURE 」に
「★★★」を「○○○」に一括置き換えして
sqlcmd等で実行すればそれでしたい作業は終わりのはずですが。
## とここまで書いて、ちょっと甘いことに気づいた。
・sqlcmdで接続するデータベースをきちんと指定するか、出力結果の先頭にuse等を追加して指定する。
・各alter文の最後にgoがないとだめなので、
SELECT ROUTINE_DEFINITION + CHAR(13) + CHAR(10) + 'GO' + CHAR(13)
+ CHAR(10) AS Expr1
FROM INFORMATION_SCHEMA.ROUTINES
WHERE (ROUTINE_DEFINITION LIKE '%★★★%')
AND (ROUTINE_TYPE = 'procedure')
とselect文を変更する。
なお、select句の中を、
REPLACE(REPLACE(ROUTINE_DEFINITION, 'CREATE PROCEDURE ', 'ALTER PROCEDURE ')
,'★★★', '○○○')
とするだけでメモ帳なんか使わないって方法でも大丈夫のような気がしますが、
'★★★'と'○○○'の内容次第。
'★★★'でPROで'○○○'がXYZとしたら、ALTER PROCEDUREが、ALTER XYZCEDUREになってしまって
全部エラー。。。
ということも考慮する必要はあります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GROUP BYでエラーが発生
-
エクセルマクロで指定範囲内の...
-
SQLのエラー(~付近に不適切な...
-
エクセルからSQLサーバー ...
-
ACCESSで作成したアプリケーシ...
-
BCPコマンドのリダイレクト値が...
-
エクセルのグループボックス枠...
-
バッチファイルからのBCP起動に...
-
SQLServerが存在しないか、アク...
-
ファイアホースモードエラーに...
-
SQLServerのエラー1069について
-
Access2000環境に対応するMid関...
-
PostgreSqlでFunctionの作成に...
-
●SQL Server2000●ストアドプロ...
-
SQLServer(MSDE) JOBの状態取得...
-
AccessのDAO.ExecuteとDoCmd.Ru...
-
20人程度が一度に使うデータベ...
-
99bb.com のライセンスバック...
-
JavaサーブレットからSQL Serve...
-
xp_cmdshellについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLのエラー(~付近に不適切な...
-
PostgreSqlでFunctionの作成に...
-
Oracle 8i コンマ(,)を含むデ...
-
GROUP BYでエラーが発生
-
ACCESS ADOでupdateが効かない
-
エクセルマクロで指定範囲内の...
-
エクセルからSQLサーバー ...
-
バッチファイルからのBCP起動に...
-
ACCESS2000ディスクまたはネッ...
-
SQLServerが存在しないか、アク...
-
エクセルのグループボックス枠...
-
オブジェクト名 '<table>' が無...
-
何も表示されない実行時エラー...
-
ACCESSで作成したアプリケーシ...
-
sqlで文字列を最後に追加したい
-
nvarchar型で指定して文字列幅...
-
Access2000環境に対応するMid関...
-
ORA-1036??
-
レポートが開けない。
-
BCPコマンドのリダイレクト値が...
おすすめ情報