sql server2005 TSql新功能学习总结(Output篇)
(2008-6-11 wjf)
点击:0
回复:0
这个功能太期待了,以前只有INSTEAD OF才有的功能移植到sql语句来了,太棒了!
可以通过引用插入的表和删除的表来访问被修改的行的旧/新映像,其方式与访问触发器类似。
在 INSERT 语句中,只能访问插入的表。
在 DELETE 语句中,只能访问删除的表。
在 UPDATE 语句中,可以访问插入的表和删除的表。
可以通过into语句将输出导入表变量中
1
2
--先创建一个表
3
create table test2(
4
[no] int ,
5
n nvarchar(100)
6
)
7
--插入测试数据
8
insert into test2([no],n)
9
select 1,'a'
10
union
11
select 2,'b'
12
union
13
select 3,'c'
14
go
15
16
--插入数据时调用
17
--把插入数据显示出来
18
INSERT test2([no],n)
19
OUTPUT INSERTED.*
20
VALUES (4, N'd');
21
GO
22
/**//*
23
no n
24
4 d
25
*/
26
select * from test2
27
go
28
/**//*
29
no n
30
1 a
31
2 b
32
3 c
33
4 d
34
*/
35
36
37
38
DECLARE @MyTableVar table(
39
[no] int ,
40
n nvarchar(100)
41
);
42
43
--把[no]=1的记录删除,并把删除结果保存到表变量@MyTableVar中
44
delete from test2
45
output deleted.*
46
into @MyTableVar
47
where [no]=1
48
49
select * from @MyTableVar
50
/**//*
51
no n
52
1 a
53
*/
54
select * from test2
55
/**//*
56
no n
57
2 b
58
3 c
59
4 d
60
*/
61
62
63
64
DECLARE @MyTableVar table(
65
Newno int ,
66
Newn nvarchar(100),
67
Oldno int ,
68
Oldn nvarchar(100)
69
);
70
71
-- 修改记录,保存修改前后的记录到表变量中
72
update test2
73
set n='ccc'
74
output
75
inserted.no,
76
inserted.n,
77
deleted.no,
78
deleted.n
79
into @MyTableVar
80
where [no]=3
81
82
select * from @MyTableVar
83
/**//*
84
Newno Newn Oldno Oldn
85
3 ccc 3 c
86
*/
87
select * from test2
88
/**//*
89
no n
90
2 b
91
3 ccc
92
4 d
93
*/
94
95

2
--先创建一个表3
create table test2( 4
[no] int ,5
n nvarchar(100)6
)7
--插入测试数据8
insert into test2([no],n)9
select 1,'a'10
union 11
select 2,'b'12
union 13
select 3,'c'14
go15

16
--插入数据时调用17
--把插入数据显示出来18
INSERT test2([no],n)19
OUTPUT INSERTED.*20
VALUES (4, N'd');21
GO22

/**//*23
no n24
4 d25
*/26
select * from test227
go28

/**//*29
no n30
1 a31
2 b32
3 c33
4 d34
*/35

36

37

38
DECLARE @MyTableVar table( 39
[no] int ,40
n nvarchar(100)41
);42

43
--把[no]=1的记录删除,并把删除结果保存到表变量@MyTableVar中44
delete from test245
output deleted.*46
into @MyTableVar47
where [no]=148

49
select * from @MyTableVar50

/**//*51
no n52
1 a53
*/54
select * from test255

/**//*56
no n57
2 b58
3 c59
4 d60
*/61

62

63
64
DECLARE @MyTableVar table( 65
Newno int ,66
Newn nvarchar(100),67
Oldno int ,68
Oldn nvarchar(100)69
);70

71
-- 修改记录,保存修改前后的记录到表变量中72
update test273
set n='ccc'74
output 75
inserted.no,76
inserted.n,77
deleted.no,78
deleted.n79
into @MyTableVar80
where [no]=381

82
select * from @MyTableVar83

/**//*84
Newno Newn Oldno Oldn85
3 ccc 3 c86
*/87
select * from test288

/**//*89
no n90
2 b91
3 ccc92
4 d93
*/94

95

以下语句中不支持 OUTPUT 子句:
· 引用本地分区视图、分布式分区视图或远程表的 DML 语句。
· 包含 EXECUTE 语句的 INSERT 语句。

文章分类