すべてのプロシージャで特定の文字列を検索および置換するプロシージャを作成する方法はありますか?SQL Serverのプロシージャ間で文字列を置換する
答えて
多分アプリケーションを修正する方が簡単でしょう。なぜソフトウェアはコメントを心配していますか?拡張プロパティでもbarfですか?コメントは常に同じであると仮定すると、
、テキストに結果をManagement Studioでこれを実行します。
SET NOCOUNT ON;
SELECT 'GO
' + REPLACE([definition], '/* offending comment */', '')
FROM sys.sql_modules
WHERE [definition] LIKE '%/* offending comment */%';
これはGO
で区切らCREATE PROCEDURE
一連のコマンドを生成します。実際にCREATE PROCEDURE
ストリングがストアード・プロシージャー本体内にある場合は、必ずCREATE PROCEDURE
の検索/作成を実行してALTER
に変更することはできません。だからではなく、あなたの好きなテキストエディタにこれらの結果を引っ張って検索を行うとするために置き換えることができます。
GO
CREATE PROCEDURE
はでそれを置き換える:これはあなたがコメントを持っていないことを前提としていますが
GO
ALTER PROCEDURE
(のCREATE PROCEDURE
の行の前に入力してください。
有効な文字列を含む手順を心配する必要がない場合は、CREATE PROCEDURE
- あなたが気にしないのであればD
SET NOCOUNT ON;
SELECT 'GO
' + REPLACE(REPLACE([definition], '/* offending comment */', ''),
'CREATE PROCEDURE', 'ALTER PROCEDURE')
FROM sys.sql_modules
WHERE [definition] LIKE '%/* offending comment */%';
...あなたの構文は、実際にCREATE PROCEDURE
ないCREATE PROC
またはCREATE
とPROC
の間に、あなたのシステムでは、大文字と小文字は区別されていないとあなたがcreate proc
やCreate Proc
を使用しているランダムな間隔であると仮定するとストアドプロシージャに関連した既存の有形物、例えばパーミッションは、あなたも、このようにそれを行うことができます:それはちょうど手続きをドロップし、それを再作成するので
SELECT 'DROP PROCEDURE '
+ QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
+ '.' + QUOTENAME(OBJECT_NAME([object_id])) + ';
' + 'GO
' + REPLACE([definition], '/* offending comment */', '')
FROM sys.sql_modules
WHERE [definition] LIKE '%/* offending comment */%';
これには、変更する必要はありません(、行く準備に非常に近いですスクリプトを生成します。 CREATE
〜ALTER
)ですが、アクセス許可や依存関係のためにオブジェクトを削除して再作成することはあまり一般的ではありません。
CREATE OR REPLACE
などのDDLで類似していると、これをスクリプト化するのがはるかに簡単になります。あなたは、これがSQL Serverへの貴重な追加だろうと感じた場合は、以下の提案に投票(とあなたのユースケースを追加するか、またはあなたが考える理由これはコメントに、価値がある)してください:
http://connect.microsoft.com/SQLServer/feedback/details/127219/create-or-replace
ありがとうur説明のためにたくさん!コメントの妨げについては、その中に/その中にある行があり、それに沿った膨大な手続きや行について話しているので、手動で行うことは永遠に必要です。 –
ありがとうございました!非常に便利なスクリプトのAaron Bertrandに感謝します。私は、2つのテーブルで "update statistics"を実行する一連のストアドプロシージャを用意していました。それらを変更して、 "fullscan、columnsで統計を更新する"ように変更しなければなりませんでした。これは(私の2番目のもの)私がやりたいことを正確に行いました - ALTERスクリプトを生成します。 "sp_MSforEachDB"ループと統合してプレスト! – NateJ
いいえ、sp_msforeachdbを使用しないでください。http://sqlblog.com/blogs/aaron_bertrand/archive/2010/12/29/a-more-reliable-and-more-flexible-sp-msforeachdb.aspx –
方法すべてのストアドプロシージャのスクリプトを.sqlファイルとして生成し、生成されたファイルのコメントをCTRL + Hのヘルプに置き換えます。これは簡単なオプションではありませんか?
しかし、5,000の手続きがあり、そのうちの150個だけがコメントを含んでいれば...コメントを含む手続きに限定しようとすると( 'WHERE'節が必要です)、' REPLACE () 'あなたは出力を取得する前に呼び出し? –
私は間違いなくあなたの意見を見ます。しかし、ウィザードを使用してスクリプトを生成すると、スクリプトの書式設定はそのままの状態になります。私たちがこれを取得するために独自のクエリを実行すると、書式設定にトスがかかると思うので、著者が混乱するかどうか疑問に思っていました。すべてのコメントがSPの冒頭にある場合、それはうまくいくはずですが、そのSP内の特定のコードブロックのコメントを置き換えたい場合はどうすればよいでしょうか? – vmvadivel
なぜフォーマットは "トスをする"でしょうか?グリッドに結果を使用しても、テキストの結果は正確である必要があります(手順のどれもが最大テキスト出力より長くない限り)。コメントのタイプとコメントが手続き本体にある場合はどちらも問題ではありませんが、問題の詳細が不足しているためにどちらかについてはわかりません。 –
- 1. 文字列間の文字の置換
- 2. 文字間の文字列を置換する
- 3. 更新のT-SQL文字列置換
- 4. SQL Server 2005のすべての文字列を置き換える方法は?
- 5. SQL Serverで文字列をクエリに変換する方法
- 6. SQL Serverで文字列をDATEに変換する
- 7. の間にある文字列を置換する
- 8. PL/SQLプロシージャの文字パラメータ
- 9. 文字列置換()/ regex replace - 文字列の配列の文字列を置換しますか?
- 10. 文字列内の文字の置換
- 11. SQL Server 2008 R2の文字マッピング/検索と文字単位の置換
- 12. 文字列PHPの文字列からHTMLを置換する
- 13. 文字列の部分文字列を置換する方法
- 14. 文字列内の '' 'を置換する
- 15. innerHTMLの文字列を置換する
- 16. jsonの文字列を置換する
- 17. SQL Server接続文字列
- 18. パペットの文字列置換?
- 19. JavaScript文字列の置換
- 20. PHPの文字列置換
- 21. 文字列の置換
- 22. Javaの文字列置換
- 23. 文字列の置換
- 24. C++の文字列置換
- 25. c#文字列の置換
- 26. Sassの文字列置換
- 27. SQLサブ文字列を更新して置換する
- 28. sqlは2つの文字列の間のすべての文字を置換します
- 29. R:文字列内の2文字間のドットを置き換える方法
- 30. Java文字列:文字列を置換する
もう少し情報をお願いします。すべてのテーブルや特定のフィールドのすべてのフィールドを検索しようとしていますか? – Marc
私はソフトウェア自体とintefering SQLストアドプロシージャのコメントを置き換えようとしていますが、手作業で1つ1つ手作業で行う方法が多すぎます –
したがって、ストアドプロシージャ定義を一括更新しようとしています? –