ストアドプロシージャは独自のバッチである必要があるため、動的SQLなしではこれを行うことはできません。したがって、次のように言うことはできません:
IF <some condition>
<start a new batch>
同じバッチでそれを維持する唯一の方法は、sp_executesql
を使用することです 。
DROP
をスクリプト化する場合 およびCREATE
同時に、オブジェクトの存在をチェックせずに実行します。これにより、次のことが可能になります:
DROP PROCEDURE ...;
GO
CREATE PROCEDURE ...;
GO
DROP
かどうかは誰が気にしますか 失敗しますか? (スクリプトを作成しただけなので、そうすべきではありません!)
可能性がある別のシステム用にこれをスクリプト化する場合 オブジェクトを持っていると、DROP
のエラーメッセージが表示されます そうでない場合でも、CREATE
引き続き発生するため、DROP
は無視してかまいません。 エラー。本当に必要な場合は、DROP
を手動でラップできます TRY/CATCH
のステートメント でも必要ないと思います。
多くの手順でこれを行う必要がある場合、または問題のないエラーを生成しないプロセスが本当に必要な場合は、Management Studioの基本的なスクリプトオプションを放棄し、サードパーティのツールを使用することをお勧めします。彼らはあなたがまだ遭遇していない問題の多くをすでに扱っているでしょうが、そうするでしょう。私はこれについてブログを書きました:
http:// bertrandaaron.wordpress.com/2012/04/20/re-blog-the-cost-of-reinventing-the-wheel/