SQL Server
2005 has new OUTPUT clause, which is quite useful. OUTPUT clause has accesses
to inserted and deleted tables (virtual tables) just like triggers. OUTPUT
clause can be used to return values to client clause. OUTPUT clause can be used
with INSERT, UPDATE, or DELETE to identify the actual rows affected by these
statements.
OUTPUT
clause can generate table variable, a permanent table, or temporary table. Even
though, @@Identity will still work in SQL Server 2005, however I find OUTPUT
clause very easy and powerful to use. Let us understand OUTPUT clause using
example.
Example 1 : OUTPUT clause into Table with INSERT statement
USE
AdventureWorks
;
GO
--------Creating the
table which will store permanent table
CREATE TABLE
TestTable
(
ID
INT
,
TEXT
Val
VARCHAR
(
100
))
----Creating temp table
to store ovalues of OUTPUT clause
DECLARE
@TmpTable
TABLE
(
ID
INT
,
TEXT
Val
VARCHAR
(
100
))
----Insert values in
real table as well use OUTPUT clause to insert
----values
in the temp table.
INSERT
TestTable
(
ID
,
TEXT
Val
)
OUTPUT Inserted.ID
,
Inserted.
TEXT
Val
INTO
@TmpTable
VALUES
(
1
,
'FirstVal'
)
INSERT
TestTable
(
ID
,
TEXT
Val
)
OUTPUT Inserted.ID
,
Inserted.
TEXT
Val
INTO
@TmpTable
VALUES
(
2
,
'SecondVal'
)
----Check the values in
the temp table and real table
----The
values in both the tables will be same
SELECT
*
FROM
@TmpTable
SELECT
*
FROM
TestTable
----Clean up time
DROP TABLE
TestTable
GO
ResultSet 1:
ID TextVal
——————— ————————
1 FirstVal
2 SecondVal
ID TextVal
——————— ———————
1 FirstVal
2 SecondVal
Example 2 :
OUTPUT clause with INSERT statement
USE
AdventureWorks
;
GO
----Creating the table
which will store permanent table
CREATE TABLE
TestTable
(
ID
INT
,
TEXT
Val
VARCHAR
(
100
))
----Insert values in
real table as well use OUTPUT clause to insert
----values
in the temp table.
INSERT
TestTable
(
ID
,
TEXT
Val
)
OUTPUT Inserted.ID
,
Inserted.
TEXT
Val
VALUES
(
1
,
'FirstVal'
)
INSERT
TestTable
(
ID
,
TEXT
Val
)
OUTPUT Inserted.ID
,
Inserted.
TEXT
Val
VALUES
(
2
,
'SecondVal'
)
----Clean up time
DROP TABLE
TestTable
GO
ResultSet 2:
ID TextVal
——————— ———————
1 FirstVal
(1 row(s) affected)
ID TextVal
——————— ———————
2 SecondVal
Example 3 :
OUTPUT clause into Table with UPDATE statement
USE
AdventureWorks
;
GO
----Creating the table
which will store permanent table
CREATE TABLE
TestTable
(
ID
INT
,
TEXT
Val
VARCHAR
(
100
))
----Creating temp table
to store ovalues of OUTPUT clause
DECLARE
@TmpTable
TABLE
(
ID_New
INT
,
TEXT
Val_New
VARCHAR
(
100
),
ID_Old
INT
,
TEXT
Val_Old
VARCHAR
(
100
))
----Insert values in
real table
INSERT
TestTable
(
ID
,
TEXT
Val
)
VALUES
(
1
,
'FirstVal'
)
INSERT
TestTable
(
ID
,
TEXT
Val
)
VALUES
(
2
,
'SecondVal'
)
----Update the table and
insert values in temp table using Output clause
UPDATE
TestTable
SET TEXT
Val
=
'NewValue'
OUTPUT Inserted.ID
,
Inserted.
TEXT
Val
,
Deleted.ID
,
Deleted.
TEXT
Val
INTO
@TmpTable
WHERE
ID
IN
(
1
,
2
)
----Check the values in
the temp table and real table
----The
values in both the tables will be same
SELECT
*
FROM
@TmpTable
SELECT
*
FROM
TestTable
----Clean up time
DROP TABLE
TestTable
GO
ResultSet 3:
ID_New TextVal_New ID_Old TextVal_Old
——————— ——————— ——————— ———————
1 NewValue 1 FirstVal
2 NewValue 2 SecondVal
ID TextVal
——————— ———————
1 NewValue
2 NewValue
Example 4 : OUTPUT clause into Table with DELETE statement
USE
AdventureWorks
;
GO
----Creating the table
which will store permanent table
CREATE TABLE
TestTable
(
ID
INT
,
TEXT
Val
VARCHAR
(
100
))
----Creating temp table
to store ovalues of OUTPUT clause
DECLARE
@TmpTable
TABLE
(
ID
INT
,
TEXT
Val
VARCHAR
(
100
))
----Insert values in
real table
INSERT
TestTable
(
ID
,
TEXT
Val
)
VALUES
(
1
,
'FirstVal'
)
INSERT
TestTable
(
ID
,
TEXT
Val
)
VALUES
(
2
,
'SecondVal'
)
----Update the table and
insert values in temp table using Output clause
DELETE
FROM
TestTable
OUTPUT
Deleted.ID
,
Deleted.
TEXT
Val
INTO
@TmpTable
WHERE
ID
IN
(
1
,
2
)
----Check the values in
the temp table and real table
----The
values in both the tables will be same
SELECT
*
FROM
@TmpTable
SELECT
*
FROM
TestTable
----Clean up time
DROP TABLE
TestTable
GO
ResultSet 4:
ID TextVal
——————— ———————
1 FirstVal
2 SecondVal
ID TextVal
——————— ———————
If you run all the above four example, you will find that OUTPUT clause is very useful.
No comments:
Post a Comment