有沒有什麼方法可以確定在會話中是否創建了特定的臨時表而不引用它創建的tempdb數據庫?用戶在登錄時分配給特定的tempdb,因此我不知道他們將使用哪個tempdb。測試多tempdb環境中是否存在臨時表?
我不需要指定tempdb來從臨時表中選擇數據,所以我可以看到表是否存在?
有沒有什麼方法可以確定在會話中是否創建了特定的臨時表而不引用它創建的tempdb數據庫?用戶在登錄時分配給特定的tempdb,因此我不知道他們將使用哪個tempdb。測試多tempdb環境中是否存在臨時表?
我不需要指定tempdb來從臨時表中選擇數據,所以我可以看到表是否存在?
在我看來,你不應該在這裏使用臨時表......這些看起來更像普通表(可能帶有用戶標識符)。這裏有什麼情況?
請注意,以這種方式使用臨時表可能會對優化程序/查詢緩存造成嚴重破壞 - 它將不得不進行大量重新編譯,因爲每次調用#FOO的含義都會發生很大變化。
可以使用OBJECT_ID檢查臨時對象的存在:
SELECT object_id('#tmpTable')
您可以指定要使用哪個tempdb中,如果你想要的,但你不必:
SELECT object_id('tempdb..#tmpTable')
值得一提的是,這也適用於全局臨時表,也:
SELECT object_id('##tmpTable')
要使腳本可以重新運行而不必在最後做一個DROP TABLE,我總是在創建一個臨時表之前進行檢查和下降。我經常在開發SQL代碼時留下創建的表。
IF NULLIF(object_id('#tmpTable'), 0) IS NOT NULL DROP TABLE #tmpTable
CREATE TABLE #tmpTable (
id int,
col1 varchar(100)
)
這是一個複雜的情況下解釋,這是所有傳統的應用程序和瘋狂的要求(包括不使用常規表)。基本上,我需要一個應用程序來創建臨時表(通過立即執行),然後使用存儲過程來填充它。然後讓應用程序從表中讀取。 WTF。 – ninesided 2008-10-14 23:15:35