Deq*_*ing 2 sql-server stored-procedures
我找到了两种方法来检查当前代码中是否存在存储过程:
if object_id('dbo.procedure_to_drop') is not null
Run Code Online (Sandbox Code Playgroud)
对比
if exists (select * from sysobjects where id = object_id('dbo.procedure_to_drop') and sysstat & 0xf = 4)
Run Code Online (Sandbox Code Playgroud)
它们之间有什么区别,哪一种是首选方式?
小智 5
第一个版本检查是否存在具有给定名称的任何对象。在这种情况下,如果您打错字并输入表的名称,它仍然会通过。关于第二个版本已过时,因为无法保证未来版本是否支持使用 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')
Run Code Online (Sandbox Code Playgroud)
sys.procedures:https ://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-procedures-transact-sql
如果你有 sql server 2016,你可以根据你的需要使用新的语言元素来做同样的事情:
| 归档时间: |
|
| 查看次数: |
9038 次 |
| 最近记录: |