object_id()vs sys.objects

时间:2009-04-28 05:38:24

标签: sql sql-server-2005 stored-procedures sql-scripts

我使用数据库脚本来检查是否存在存储过程,然后将其删除然后创建它。

以下哪项更有效地检查和删除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;

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

不,没有令人信服的理由直接使用sys.objects。事实上,不鼓励使用这些系统视图 - 所以如果你能避免它,那就这样做吧!

相反,应该尽可能使用INFORMATION_SCHEMA模式视图 - 这是一个标准的SQL-92机制,用于公开有关服务器的元数据(而不是Microsoft特定的使用sys。*视图的方式)。

马克