-
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命令插入语句如下所示:(
id int IDENTITY PRIMARY KEY,
NAME VARCHAR(20),
GRADE INT
)
insert into reader_info
output inserted.id as [inserted id],
INSERTED.name as [inserted name],
INSERTED.GRADE AS [inserted grade]
values ('王晓波',700)
执行上述语句后,可以看到如下结果,如图6-20所示。output inserted.id as [inserted id],
INSERTED.name as [inserted name],
INSERTED.GRADE AS [inserted grade]
values ('王晓波',700)
图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所示。set grade=grade-20
OUTPUT INSERTED.id,inserted.name,
deleted.grade as [old grade],
inserted.grade as [new grage]
where grade>=540
图6-21 执行UPDATE语句后的结果显示
由OUTPUT子句返回的结果反映了OUTPUT输出的结果是在INSERT,UPDATE和DELETE执行之后、但在任何触发器引发之前的值。对于一个INSTAND OF触发器而言,这个值将反映没有执行INSTAND OF触发器进表中应有的数据,当然此时的INSTAND OF触发器仍旧会被引发。
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式