クライアントが「データベース管理」機能を実行するたびに実行する必要がある SQL スクリプトがあります。スクリプトには、クライアント データベースにストアド プロシージャを作成する機能が含まれています。これらのクライアントの中には、スクリプトの実行時にストアド プロシージャが既に存在するものもあれば、存在しないものもあります。不足しているストアド プロシージャをクライアント データベースに追加する必要がありますが、T-SQL 構文をいくら変更しても、
CREATE/ALTER PROCEDURE'はクエリバッチの最初のステートメントである必要があります
作成する前にドロップするとうまくいくと読んだことがありますが、その方法はあまり好きではありません。
IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'MyProc')
DROP PROCEDURE MyProc
GO
CREATE PROCEDURE MyProc
...
ストアド プロシージャの存在をチェックし、存在しない場合は作成し、存在する場合は変更するように追加するにはどうすればよいですか?
ベストアンサー1
これはすでに回答済みとしてマークされていると思いますが、以前は次のようにしていました。
IF NOT EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND OBJECT_ID = OBJECT_ID('dbo.MyProc'))
exec('CREATE PROCEDURE [dbo].[MyProc] AS BEGIN SET NOCOUNT ON; END')
GO
ALTER PROCEDURE [dbo].[MyProc]
AS
....
手順を省略しないようにするためです。