MSSQL — Local | Global Temp Table

Conrad
Conrad KU
Published in
2 min readOct 16, 2022
Photo by Rubaitul Azad on Unsplash
🔖 文章索引

1. Local Temp Table
2. Global Temp Table
3. 一般 Table
4. CREATE Local Temp Table
5. CREATE Global Temp Table
6. Local Temp Table in Stored Procedure
7. Global Temp Table in Stored Procedure

Local Temp Table

只存在當前 session

Prefix with one (#) symbol.

e.g. #localTempTable

Global Temp Table

Prefix with (##) symbol.

e.g. ##globalTempTable

新增後存放的位置於

Database\System Databases\tempdb\Temporary Tables

一般 Table

IF (EXISTS (SELECT *FROM INFORMATION_SCHEMA.TABLESWHERE TABLE_NAME = 'Person1'))BEGINTRUNCATE TABLE Person1;DROP TABLE Person1;END;GOCREATE TABLE Person1(Id INT IDENTITY(1, 1) PRIMARY KEY NOT NULL,[Name] NVARCHAR(20) NULL,);

CREATE Local Temp Table

-- From SQL Server 2016, you can just useDROP TABLE IF EXISTS #Person2;-- From Previous version of SQL ServerIF OBJECT_ID('tempdb..#Person2') IS NOT NULLBEGINTRUNCATE TABLE #Person2;DROP TABLE #Person2;END;CREATE TABLE #Person2(Id INT IDENTITY PRIMARY KEY NOT NULL,[Name] NVARCHAR(20) NULL);

Check Temp Table information

SELECT *FROM tempdb..sysobjectsWHERE name LIKE '#Person2%';

INSERT Local Temp Table

INSERT INTO #Person2VALUES ('P2Name1'), ('P2Name2'), ('P2Name3');SELECT *FROM #Person2;

CREATE Global Temp Table

-- From SQL Server 2016, you can just useDROP TABLE IF EXISTS ##Person3;-- From Previous version of SQL ServerIF OBJECT_ID('tempdb..##Person3') IS NOT NULLBEGINTRUNCATE TABLE ##Person3;DROP TABLE ##Person3;END;CREATE TABLE ##Person3(Id INT IDENTITY PRIMARY KEY NOT NULL,[Name] NVARCHAR(20) NULL);

Check Temp Table information

SELECT *FROM tempdb..sysobjectsWHERE name LIKE '##Person3%';

INSERT Global Temp Table

INSERT INTO ##Person3VALUES ('P3Name1'), ('P3Name2'), ('P3Name3');SELECT *FROM ##Person3;

Local Temp Table in Stored Procedure

sp_ 開頭的都是系統預設

自己建立的 Stored Procedure 前面加 sp

IF (EXISTS(SELECT *FROM INFORMATION_SCHEMA.ROUTINESWHERE ROUTINE_TYPE = 'PROCEDURE'AND LEFT(ROUTINE_NAME, 3) NOT IN ('sp_', 'xp_', 'ms_')AND SPECIFIC_NAME = 'spLocalTempTable'))BEGINDROP PROCEDURE spLocalTempTable;END;GOCREATE PROCEDURE spLocalTempTableASBEGINIF OBJECT_ID('tempdb..#Person4') IS NOT NULLBEGINTRUNCATE TABLE #Person4;DROP TABLE #Person4;END;CREATE TABLE #Person4(Id INT IDENTITY(1, 1) PRIMARY KEY NOT NULL,[Name] NVARCHAR(20) NULL);INSERT INTO #Person4VALUES ('spP4Name1'), ('spP4Name2'), ('spP4Name3');SELECT *FROM #Person4;ENDGOEXECUTE spLocalTempTable;GO

Global Temp Table in Stored Procedure

##Global Temp Table will not be automatically dropped

on the completion of stored procedure execution.

sp_ 開頭的都是系統預設

自己建立的 Stored Procedure 前面加 sp

IF (EXISTS(SELECT *FROM INFORMATION_SCHEMA.ROUTINESWHERE ROUTINE_TYPE = 'PROCEDURE'AND LEFT(ROUTINE_NAME, 3) NOT IN ('sp_', 'xp_', 'ms_')AND SPECIFIC_NAME = 'spGlobalTempTable'))BEGINDROP PROCEDURE spGlobalTempTable;END;GOCREATE PROCEDURE spGlobalTempTableASBEGINIF OBJECT_ID('tempdb..##Person5') IS NOT NULLBEGINTRUNCATE TABLE ##Person5;DROP TABLE ##Person5;END;CREATE TABLE ##Person5(Id INT IDENTITY(1, 1) PRIMARY KEY NOT NULL,[Name] NVARCHAR(20) NULL);INSERT INTO ##Person5VALUES ('spP5Name1'), ('spP5Name2'), ('spP5Name3');SELECT *FROM ##Person5;ENDGOEXECUTE spGlobalTempTable;GO

--

--

Conrad
Conrad KU

Remember, happiness is a choice, so choose to be happy.