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 data to Table variable @TStudent
- INSERT INTO @TStudent(StudentID,Name)
- SELECT DISTINCT StudentID, Name FROM StudentMaster ORDER BY StudentID ASC
- --Select data from Table variable @TStudent
- SELECT * FROM @TStudent
- --Next batch
- GO
- SELECT * FROM @TStudent --gives error
- DECLARE @TStudent TABLE
- (
- RollNo INT IDENTITY(1,1),
- StudentID INT,
- Name INT
- )
- --Insert data to Table variable @TStudent
- INSERT INTO @TStudent(StudentID,Name)
- SELECT DISTINCT StudentID, Name FROM StudentMaster ORDER BY StudentID ASC
- --Select data from Table variable @TStudent
- SELECT * FROM @TStudent
- --Next batch
- GO
- SELECT * FROM @TStudent --gives error
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!
0 comments:
Post a Comment
Note: only a member of this blog may post a comment.