Temporary tables and table variables, both have their own pros and cons. We need to decide which one to use and when.
Let us compile the list for differences.
⇒ Table variable (@table) is created in the memory. Whereas, a Temporary table (#temp) is created in the tempdb database. However, if there is a memory pressure the pages belonging to a table variable may be pushed to tempdb.
⇒ Table variables cannot be involved in transactions, logging or locking. This makes @table faster then #temp. So table variable is faster then temporary table.
⇒ Temporary tables are allowed CREATE INDEXes whereas, Table variables aren’t allowed CREATE INDEX instead they can have index by using Primary Key or Unique Constraint.
⇒ Table variable can be passed as a parameter to functions and stored procedures while the same cannot be done with Temporary tables.
⇒ Temporary tables are visible in the created routine and also in the child routines. Whereas, Table variables are only visible in the created routine.
⇒ Temporary table allows Schema modifications unlike Table variables.
Table Variable in SQL Server – Example
Table variable is a very useful programming construct, like that of any other variable.
- DECLARE @TStudent TABLE
- (
- RollNo INT IDENTITY(1,1),
- StudentID INT,
- Name INT
- )
-
- INSERT INTO @TStudent(StudentID,Name)
- SELECT DISTINCT StudentID, Name FROM StudentMaster ORDER BY StudentID ASC
-
-
- SELECT * FROM @TStudent
-
-
- GO
- SELECT * FROM @TStudent
- DECLARE @TStudent TABLE
- (
- RollNo INT IDENTITY(1,1),
- StudentID INT,
- Name INT
- )
-
- INSERT INTO @TStudent(StudentID,Name)
- SELECT DISTINCT StudentID, Name FROM StudentMaster ORDER BY StudentID ASC
-
-
- SELECT * FROM @TStudent
-
-
- GO
- SELECT * FROM @TStudent
Temporary Tables in SQL Server – Example
In SQL Server, based on the scope and behavior, temporary tables are of two types,
- Local Temporary Tables (#temp)
- Global Temporary Tables (##temp)
-
- CREATE TABLE #StudentTemp
- (
- StudentID int,
- Name varchar(50),
- Address varchar(150)
- )
- GO
- INSERT INTO #StudentTemp VALUES ( 1, 'Dipendra','Pune');
- GO
- SELECT * FROM #StudentTemp
- CREATE TABLE #StudentTemp
- (
- StudentID int,
- Name varchar(50),
- Address varchar(150)
- )
- GO
- INSERT INTO #StudentTemp VALUES ( 1, 'Dipendra','Pune');
- GO
- SELECT * FROM #StudentTemp
Points to Remember
- Temporary Tables are physically created in the tempdb database. These tables act as the normal table and also can have constraints, index like normal tables.
- Table Variable acts like a variable and exists for a particular batch of query execution. It gets dropped once it comes out of batch. It is created in the memory database but may be pushed out to tempdb.
- Use Table variable, if you have less than 1000 rows otherwise go for Temporary tables.
I hope I was able to explain the difference between Temporary Tables and Table variables in SQL Server.
Happy Reading!