5

私はこれまで、ストアド プロシージャ展開スクリプトの一部として次のものを使用してきました。

IF NOT EXISTS (SELECT * FROM sys.objects O 
   WHERE O.[object_id] = OBJECT_ID(N'[dbo].[SPROC_NAME]') 
   AND OBJECTPROPERTY(O.[object_id],N'IsProcedure') = 1)

    EXEC('CREATE PROCEDURE [dbo].[SPROC_NAME] AS')
GO

ALTER PROCEDURE [dbo].[SPROC_NAME]
AS
BEGIN ...

オブジェクト ID ルックアップの型を取るオーバーロードについては知りませんでしたOBJECT_ID。たとえば、次のようになります。

OBJECT_ID(N'[dbo].[SPROC_NAME]', N'P')

そのオーバーロードを使用すると、OBJECTPROPERTYルックアップが不要になるようです。

オーバーロードだけを使用してルックアップOBJECT_IDをドロップすることにマイナス面があるかどうかを知りたいです。OBJECTPROPERTY

4

4 に答える 4

1

あなたの状態は少し短くなる可能性があります:

    IF OBJECT_DEFINITION(OBJECT_ID('dbo.Procedure_Name', 'P')) IS NULL
    BEGIN
        EXEC sys.sp_executesql 'CREATE PROCEDURE dbo.Procedure_Name AS'
    END

別の方法:

    IF OBJECT_ID('dbo.Procedure_Name', 'P') IS NULL
    BEGIN
        EXEC sys.sp_executesql 'CREATE PROCEDURE dbo.Procedure_Name AS'
    END
于 2013-08-27T05:18:39.353 に答える
1

私の好みの方法は次のとおりです。

  if object_id('x') is not null
  begin
    drop procedure x
  end
  go
  create procedure x ...
  ...
于 2013-08-27T05:32:04.187 に答える