我們在寫sql 腳本的時候經常會用到臨時表,有時間也需要根據臨時表是否存在做一些邏輯處理。還好sql server已經集成了一個
Object_ID的函數,能夠判斷是否創建了臨時表。使用挺方便的。
OBJECT_ID 參數:
'object_name'
要使用的對象。
object_name
的數據類型為
varchar
或
nvarchar。如果
object_name
的數據類型為
varchar,則它將隱式 轉換為
nvarchar。可以選擇是否指定數據庫和架構名稱。
'object_type'
架構范圍的對象類型。
object_type
的數據類型為
varchar
或
nvarchar。如果
object_type
的數據類型為
varchar,則它將 隱式轉換為
nvarchar。有關對象類型的列表,請參閱
sys.objects (Transact-SQL)
中的
type
列。
第一個Name就是我們創建的臨時表的名稱如果是臨時表需要(tempdb.dbo.#mytemp),第二個type其實可以不用填寫。我在使用的時候一般都是給第一個參數,也沒深入了解第二個參數。
實例:
一、判斷臨時表是否存在,如果存在則刪除。
--創建一個臨時表 CREATE TABLE #mytemptable ( id INT ) --判斷臨時表是否存在,存在則刪除 IF OBJECT_ID(N'tempdb.dbo.#mytemptable') IS NOT NULL BEGIN DROP TABLE #mytemptable PRINT 1 END ELSE BEGIN PRINT 2 END
第二次執行結果:2
二、判斷臨時表是否存在。如果不刪除將一直存在。
--創建一個臨時表 CREATE TABLE #mytemptable(id INT) --沒有刪除將一直存在 IF OBJECT_ID(N'tempdb.dbo.#mytemptable') IS NOT NULL BEGIN PRINT 1 END ELSE BEGIN PRINT 2 END
執行結果:1
這個執行結果是在一個查詢分析器里面執行的結果,開啟一個就會有一個會話存在,如果沒有關閉這個會話他將一直存在。
那么如果這個會話結束了沒有手動釋放資源,那么臨時表是否還會占用空間。
待續未完。