ストアドプロシージャは独自のバッチである必要があるため、動的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/