在SQL Server 2008及更高版本中,如果我要更改存储过程,则可以发出
{{1}}
命令。如果该过程存在,则将其删除;如果该过程不存在,则不会引发任何错误,并且继续处理。是否值得将DROP PROCEDURE / CREATE PROCEDURE组合(当我正在更新代码时)包装在TRY / CATCH块中以防万一,或者如果某些东西阻止了该过程,那么DROP PROCEDURE不会返回错误吗? / p>
答案 0 :(得分:2)
如注释中所述,仅在SQL Server 2016或更高版本中添加了IF EXISTS
:
如果存在
适用于: SQL Server(SQL Server 2016(13.x)版本)。
DROP PROC IF EXISTS foo -- No error handling needed
如果您使用的是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
如果您不使用SQL Server 2016或更高版本,则将陷入“经典”方法中:
IF OBJECT_ID('foo') IS NOT NULL
DROP PROC foo
GO
CREATE PROC foo ...