Oracle は「作成または置換」ステートメントを実行します。Sql サーバーはそうではないようです。Enterprise Manager からスクリプトを作成している場合は、代わりに「削除して作成する」ことを提案します。ドロップ アンド クリエイトは、データベース管理チームが行ったすべての許可を破棄するため、ストアド プロシージャに対して許可を行った場合には望ましくありません。開発者と管理者の間で問題を分離するには、「作成または置換」が本当に必要です。
私が最近やっていることはこれです:
use [myDatabase]
go
create procedure myProcedure as
begin
print 'placeholder'
end
go
alter procedure myProcedure as
begin
-- real sproc code here
end
go
これは私が望むことをします。プロシージャが存在しない場合は、作成してから正しいコードに変更します。プロシージャが存在する場合、作成は失敗し、alter はコードを新しいコードで更新します。
ストアド プロシージャが既に存在する場合、create は誤解を招くエラーをスローするため、管理者には別の問題が生じます。もちろん、望ましい結果が得られたときに赤いエラー テキストが表示されないという事実は誤解を招きます。
赤いテキストを抑制する方法はありますか? 私が試したことはすべて、何らかの方法で「CREATE/ALTER PROCEDUREはクエリバッチの最初のステートメントでなければなりません」というエラーにつながります。