2

質問はそれをほぼ要約しています。ストア プロシージャのテキストを大量に置換する必要があります。手動で行うことが不可能なほど多くはありませんが、質問するのに十分です。また、本番環境で変更を行う際のユーザー エラーの変更を減らす自動化も好みます。

次のように識別できます。

select OBJECT_DEFINITION(object_id), *
from sys.procedures
where OBJECT_DEFINITION(object_id) like '%''MyExampleLiteral''%'
order by name

それらをすべて一括更新して「MyExampleLiteral」を「MyOtherExampleLiteral」に変更する方法はありますか?

ストアド プロシージャをすべて開く方法さえあればいいのにと思います。より大きなリストでこれらのストア プロシージャを見つけるだけでも、しばらく時間がかかります。

上記の select ステートメントを使用して、alter ステートメントを生成しようと考えましたが、改行が失われます。

前もって感謝します、

これは Microsoft SQL Server です。

4

2 に答える 2

0

問題のデータベースに応じて、使用するさまざまなツールがあります。たとえば、Microsoft SQL Server Data Tools は Visual Studio と統合されており、これらの種類の操作を非常に簡単に実行できます。データベースはスクリプトとしてソリューションに保存され、必要なキーワードを検索して置き換えることができます。他のプラットフォームでも同様のツールが利用できると思います。

于 2013-02-25T22:34:30.550 に答える
0

動的SQLでこれを行うことができます。システム テーブルにクエリを実行して、「MyExampleLiteral」を含むすべての SP を取得します。

SELECT [object_id] FROM sys.objects o
WHERE type_desc = 'SQL_STORED_PROCEDURE'
    AND is_ms_shipped = 0 
    AND OBJECT_DEFINITION(o.[object_id]) LIKE '%<search string>%'

次に、それらの object_id を通過する while ループを記述します。while ループでは、OBJECT_DEFINITION()を文字列に取得し、「MyExampleLiteral」を置き換えてから、文字列を に置き換えCREATE PROCEDUREALTER PROCEDURE実行しますsp_executesql

このクレイジーなことをするので、最初にデータベースをバックアップしてください。

于 2013-02-26T00:03:14.623 に答える