利用SQL SERVER的系統函數 object_id() 可以判斷是否存在表、臨時表,
object_id() 的作用是返回架構范圍內對象的數據庫對象標識。(即返回系統視圖 sys.objects 的 object_id 字段值)
語法:
OBJECT_ID ( '[ database_name . [ schema_name ] . | schema_name . ] object_name' [ ,'object_type' ] )
返回值是 int 類型,如果對象不存在則返回 null 。
判斷是否存在表
if object_id(N'dbo.Info_City',N'U') is not null print '存在表' else print '不存在表'
判斷是否存在臨時表
if object_id(N'tempdb.dbo.#TEMP2',N'U') is not null print '存在#TEMP2' else print '不存在#TEMP2'
注意:判斷臨時表需要指定臨時數據庫 tempdb
判斷其他架構范圍內的對象
因為函數object_id() 返回的是架構范圍內對象的數據庫對象標識,意味着例如表、視圖、約束、存儲過程等其他架構范圍內對象也可以通過上述方法判斷其存在性。
例如,判斷存儲過程僅需稍稍修改對象名和對象類型即可:
if object_id(N'dbo.P_Base_GetServerInfo',N'P') is not null print '存在存儲過程' ELSE print '不存在存儲過程'
注:存儲過程的 object_type 為 P,其他的架構范圍內對象以及對應的 object_type 字段值可以從我上一篇查找到。