SQL Server
支持臨時表(本地和全局)。臨時存儲過程範圍
使用動態SQL(EXEC
或dbo.sp_executesql
),我們可以創建新的上下文,並且本地臨時表只在動態SQL塊中可見,但不在外部。
-- Normal table
EXEC ('CREATE TABLE tab(i INT); INSERT INTO tab(i) VALUES (1)');
SELECT * FROM tab;
-- Global temporary table
EXEC ('CREATE TABLE ##tab(i INT); INSERT INTO ##tab(i) VALUES (2)');
SELECT * FROM ##tab;
-- Local temporary table
EXEC ('CREATE TABLE #tab(i INT); INSERT INTO #tab(i) VALUES (3)');
SELECT * FROM #tab;
-- Invalid object name '#tab'.
現在讓我們嘗試相同的存儲過程:
-- Normal procedure
EXEC ('CREATE PROCEDURE my_proc AS SELECT 1 AS col;');
EXEC my_proc;
-- Global temporary procedure
EXEC ('CREATE PROCEDURE ##my_proc AS SELECT 2 AS col;');
EXEC##my_proc;
-- Local temporary procedure
EXEC ('CREATE PROCEDURE #my_proc AS SELECT 3 AS col;');
EXEC#my_proc;
問題是爲什麼本地臨時程序的行爲不同並且在EXEC
以外可見?
FYI:如果對象在tempdb.sys.objects項,我們都能夠看到這甚至在scope.querying系統目錄後可能提供更多信息 – TheGameiswar