TRY / CATCH块中的DROP PROCEDURE / CREATE PROCEDURE

时间:2018-10-25 18:59:12

标签: sql-server tsql

在SQL Server 2008及更高版本中,如果我要更改存储过程,则可以发出

{{1}}

命令。如果该过程存在,则将其删除;如果该过程不存在,则不会引发任何错误,并且继续处理。是否值得将DROP PROCEDURE / CREATE PROCEDURE组合(当我正在更新代码时)包装在TRY / CATCH块中以防万一,或者如果某些东西阻止了该过程,那么DROP PROCEDURE不会返回错误吗? / p>

1 个答案:

答案 0 :(得分:2)

如注释中所述,仅在SQL Server 2016或更高版本中添加了IF EXISTS

  

如果存在

     

适用于: SQL Server(SQL Server 2016(13.x)版本)。

DROP PROC IF EXISTS foo -- No error handling needed

请参阅:https://docs.microsoft.com/en-us/sql/t-sql/statements/drop-procedure-transact-sql?view=sql-server-2016

如果您使用的是SQL Server 2016 SP1或更高版本,则甚至不需要DROP,因为在创建过程时可以添加CREATE OR ALTER

  

或更改

     

适用于: Azure SQL数据库SQL Server(从SQL Server 2016(13.x)SP1开始)。

CREATE OR ALTER PROC foo ... -- No drop needed

请参阅:https://docs.microsoft.com/en-us/sql/t-sql/statements/create-procedure-transact-sql?view=sql-server-2017

如果您不使用SQL Server 2016或更高版本,则将陷入“经典”方法中:

IF OBJECT_ID('foo') IS NOT NULL
    DROP PROC foo
GO

CREATE PROC foo ...