我找到了两种方法来检查当前代码中是否存在存储过程:
if object_id('dbo.procedure_to_drop') is not null
VS
if exists (select * from sysobjects where id = object_id('dbo.procedure_to_drop') and sysstat & 0xf = 4)
它们之间有什么区别,哪种方式更适合?
答案 0 :(得分:4)
第一个版本检查是否存在具有给定名称的任何对象。在这种情况下,如果您输入拼写错误并输入表格的名称,它仍然会通过。 关于第二个版本已经过时,因为无法保证将来的版本是否支持使用sysstat。 (查看msdn网站:https://docs.microsoft.com/en-us/sql/relational-databases/system-compatibility-views/sys-sysobjects-transact-sql)
我不会使用它们中的任何一个。我更愿意直接按名称检查对象:
if exists (select 1 from sys.procedures where name = 'procedure_to_drop')
sys.procedures:https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-procedures-transact-sql
如果你有sql server 2016,你可以使用新的语言元素来做同样的事情,具体取决于你想要的: