VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 数据库 > T-SQL >
  • sql语句大全之OUTPUT

OUTPUTsql语句大全

在SQL SERVER 2008之前,要想观察INSERT,DELETE或UPDATE命令的结果,唯一的方式是在这些操作之后通过触发器来进行。在触发器的内部,可以看到一行在命令执行之前和执行之后的状态。SQL SERVER 2008为INSERT,UPDATE和DELETE命令增加了一个可选项OUTPUT子句,使用户可以捕获到在触发器的内部可以看到的信息。
INSERT ,UPDATE和DELETE命令使用了OUTPUT子句自身的一个常用语法,但它的位置不同于它在命令中的位置。OUTPUT子句可以像SELECT命令那样将结果返回给客户或者与INTO子句一起使用以在一个表中增加行。
OUTPUT的用途之一是获得一个标识列的数值,这些值由INSERT命令分配给一个行。下面结合一些具体实例来说明其用法。首先,创建一个读者信息表来存储一些新来的读者的信息,其表定义如下面所示:
create table reader_info
(
id int IDENTITY PRIMARY KEY,
NAME VARCHAR(20),
GRADE INT
)
创建好表之后,然后使用INSERT命令为该表增加一条学生信息。INSERT命令包含一个返回数据值与其新标识的OUTPUT子句,基这个例子中,SCOPE_IDENTITY()函数用来获得新标识,使用INSERT命令插入语句如下所示:
insert into reader_info
output inserted.id as [inserted id],
INSERTED.name as [inserted name],
INSERTED.GRADE AS [inserted grade]
values ('王晓波',700)
执行上述语句后,可以看到如下结果,如图6-20所示。

图6-20  获得新标识
所有OUTPUT子句通用的语法是OUTPUT关键字以及用逗号分隔的列名和可选的别名,这些列可以来自INSERTED或DELETED表。INSERTED或DELETED表是逻辑上的表而非物理上的表。INSERTED表将包含被处理表中的所有列。这些列将包含改变或处理之后的值,即INSERT或UPDATE命令所影响的所有值。DELETED表将包含改变或处理之前删除的行,即在执行DELETE或UPDATE命令之前的所有值。
一个INSERT命令只产生一个INSERTED表,一个DELETE命令只产生一个DELETED表,但一个UPDATE命令将产生两个表,即INSERTED表和DELETED表。
下面看具体实例,了解UPDATE产生的这两个表。使用UPDTAE命令更新表reader_info,如下所示:
update reader_info
set grade=grade-20
OUTPUT INSERTED.id,inserted.name,
deleted.grade as [old grade],
inserted.grade as [new grage]
where grade>=540
在这个例子里,它把来自INSERTED和DELETED表中的数据列分别用来区分输出数据中的旧值和新值。在一个UPDATE命令中,OUTPUT子句总处在SET子句之后并处在任何FROM和WHERE子句之前。执行上述UPDATE语句后,可以看到显示结果如图6-21所示。
 

图6-21  执行UPDATE语句后的结果显示
由OUTPUT子句返回的结果反映了OUTPUT输出的结果是在INSERT,UPDATE和DELETE执行之后、但在任何触发器引发之前的值。对于一个INSTAND OF触发器而言,这个值将反映没有执行INSTAND OF触发器进表中应有的数据,当然此时的INSTAND OF触发器仍旧会被引发。

相关教程