2009-04-28 26 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視圖比後者具有更多的信息。

相關問題