2009-04-28 27 views
3

我使用数据库脚本检查存储过程的存在,然后删除它然后创建它。object_id()vs sys.objects

以下哪个将是用于检查和滴的SP
选项1

更高效
IF EXISTS(SELECT * FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[myStoredProc]',N'P')) 
    DROP PROCEDURE dbo.myStoredProc; 

选项2

IF OBJECT_ID (N'dbo. myStoredProc',N'P') IS NOT NULL 
    DROP PROCEDURE dbo.myStoredProc; 

我已决定使用第二个因显而易见的原因,是否有任何理由,我应该去第一个选项

回答

1

不,没有直接使用sys.objects的强制性理由。事实上,使用这些系统视图是不鼓励的 - 所以如果你能避免它,那就这样做吧!如果可能的话,应该使用INFORMATION_SCHEMA模式视图 - 这是一种标准的SQL-92机制,用于公开关于服务器的元数据(而不是微软特定的使用sys。*视图的方式)。

Marc

2

潮流已经改变。 MSDN当前的策略是应该使用sys.objects而不是INFORMATION_SCHEMA视图,因为sys视图比后者具有更多的信息。

相关问题