我發現了兩個方法來檢查,如果在我們當前的代碼中存在的存儲過程:不同的方法來檢查,如果在SQL Server中存在一個存儲過程
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)
什麼之間的區別他們和哪一個是更喜歡的方式?
更容易閱讀和理解別人將是我的首選方法。第一個將是我的選擇。其他選項是'SELECT * FROM sysobjects WHERE id = object_id(N'[dbo]。[MyProc]')和OBJECTPROPERTY(id,N'IsProcedure')= 1'或'SELECT * FROM sys.objects WHERE type ='P '和OBJECT_ID = OBJECT_ID('dbo.MyProc')'http://stackoverflow.com/questions/2072086/how-to-check-if-a-stored-procedure-exists-before-creating-it – zedfoxus
這是第3次方式:SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE ='PROCEDURE';一些列是ROUTINE_NAME,ROUTINE_DEFINITION(proc sql code),ROUTINE_SCHEMA,CREATED,LAST_ALTERED。我會使用這個或@ Morzel的答案 - 通過某種方式,您可以使用過程名稱而不是object_id - 它更易於閱讀。 –