すべてのプロシージャで特定の文字列を検索および置換するプロシージャを作成する方法はありますか?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. SQL Serverは文字列内の文字を置換します
- 2. SQL Serverの文字列を整数に置き換える
- 3. SQL Serverの: '関数をREPLACE置き換える' が '' 文字列
- 4. 文字列間の文字の置換
- 5. SQL Server 2012は、動的SQLのSelect文の文字列を置換します
- 6. SQL Server 2008の結果の文字列置換 - マルチ識別子
- 7. 文字間の文字列を置換する
- 8. SQL Server 2005のすべての文字列を置き換える方法は?
- 9. 更新のT-SQL文字列置換
- 10. Sql文字列置換の問題
- 11. SQL Server 2008再帰的cte文字列元の値を維持する置換
- 12. SQLの文字列中の最初の文字列を置換する
- 13. SQL Serverで文字列をDATEに変換する
- 14. SQL Serverで文字列をクエリに変換する方法
- 15. SQL Serverはnullを空の文字列に置き換えます。
- 16. 文字列のアンダースコアを置換する
- 17. Oracle SQLの置換文字
- 18. JavaScript内の4 "文字の間の文字列内の文字列の置換
- 19. 置換文字列内の同じ単語の文字列を置換する
- 20. SQLのテーブルの文字列を別の文字列に置き換える
- 21. 文字間の文字列の抽出と置換
- 22. STUFFを使用するSQLの文字列を、置換する文字列よりも小さい文字列で置換する
- 23. Qt 2つの文字列の間の文字列を置換します
- 24. PL/SQLプロシージャの文字パラメータ
- 25. プロシージャSQL ServerでGET
- 26. SQLの文字列の一部を置換する
- 27. の間にある文字列を置換する
- 28. ユークリッドで文字列を置換する
- 29. 文字列を日付に変換するSQL Server
- 30. SQL Server:イメージデータを文字列に変換する
もう少し情報をお願いします。すべてのテーブルや特定のフィールドのすべてのフィールドを検索しようとしていますか? – Marc
私はソフトウェア自体とintefering SQLストアドプロシージャのコメントを置き換えようとしていますが、手作業で1つ1つ手作業で行う方法が多すぎます –
したがって、ストアドプロシージャ定義を一括更新しようとしています? –