在sqlserver中我们一般用output标志变量为输出参数,常用在
存储过程返回某个值。
最近在写T-sql语句的时候同事向我介绍了output子句的用法。
假设现在有这样一张表t_users
现在有这样一个需求,从表中取出一条记录插入到其他的表中之后并且删除记该录。
通常的做法是:
(1)先取出user_no为1的用户数据插入到另外一张表(t_user_temp 一张用户信息临时表)中:
1 insert into t_user_temp(user_no, user_name, create_datetime)
2 select user_no, user_name, create_datetime from t_users where user_no = 1
(2)删除表t_users中user_no为1的数据
delete from t_users
where user_no = 1
我们现在可以使用output去可以做这些事情,只要一个sql语句就可以实现以上需求:
delete top(1) from t_users
output deleted.user_name, deleted.create_datetime into t_user_temp(user_name, create_datetime)
这样在表t_user中删除一条记录并将该数据插入到表t_user_temp中,这种写法是不是方便了很多?
sqlserver帮助文档中这样说明output子句:
返回受 INSERT、UPDATE 或 DELETE 语句影响的每行的信息,或者返回基于上述每行的表达式。这些结果可以返回到处理应用程序,以供在确认消息、存档以及其他类似的应用程序要求中使用。此外,也可以将结果插入表或表变量。
用于:
DELETE
INSERT
UPDATE
语法:
<OUTPUT_CLAUSE> ::=
{
[ OUTPUT <dml_select_list> INTO { @table_variable | output_table } [ ( column_list ) ] ]
[ OUTPUT <dml_select_list> ]
}
<dml_select_list> ::=
{ <column_name> | scalar_expression } [ [AS] column_alias_identifier ]
[ ,...n ]
<column_name> ::=
{ DELETED | INSERTED | from_table_name } . { * | column_name }
实例:
DELETE TOP(1) dbo.DatabaseLog WITH (READPAST)
OUTPUT deleted.*
WHERE DatabaseLogID = 7;
GO
很多的时候查看sqlserver的帮助能够发现很多东西能够简化原有的操作。
大家要是想多了解output的用法可以查看帮助文档自己多多的尝试。
分享到:
相关推荐
10.5 OUTPUT子句 10.6 总结 第11章 查询分区表 11.1 在SQL Server中进行分区 11.1.1 分区视图 11.1.2 分区表 11.2 总结 第12章 图、树、层次结构和递归查询 12.1 术语 12.1.1 图 12.1.2 树 12.1.3 层次...
7.6.2 OUTPUT子句 7.7 性能方面的考虑 7.8 本章小结 7.9 练习 第8章 规范化和其他基本设计问题 8.1 表 8.2 保持数据“规范 8.2.1 准备工作 8.2.2 第一范式 8.2.3 第二范式 8.2.4 第三范式 8.2.5 其他范式 8.3 关系 ...
10.5 OUTPUT子句475 10.6 总结482 第11章 查询分区表483 11.1 在SQL Server中进行分区483 11.1.1 分区视图483 11.1.2 分区表484 11.2 总结496 第12章 图、树、层次结构和递归查询497 12.1 术语497 12.1.1 图497 ...
7.6.2 OUTPUT子句 7.7 性能方面的考虑 7.8 本章小结 7.9 练习 第8章 规范化和其他基本设计问题 8.1 表 8.2 保持数据“规范 8.2.1 准备工作 8.2.2 第一范式 8.2.3 第二范式 8.2.4 第三范式 8.2.5 其他范式 8.3 关系 ...
10.5 OUTPUT子句475 10.6 总结482 第11章 查询分区表483 11.1 在SQL Server中进行分区483 11.1.1 分区视图483 11.1.2 分区表484 11.2 总结496 第12章 图、树、层次结构和递归查询497 12.1 术语497 12.1.1 ...
编写好后使用SQLServer的固定角色sysadmin注册该扩展存储过程,并将执行权限授予其它用户,这个扩展存储过程只能添加到master数据库。 在编写扩展存储过程中可能要用到某些系统存储过程,这些系统存储过程如下:...
(1)掌握 PL/SQL 的基本使用方法。 (2)在SQL*PLUS环境下运行PL/SQL的简单程序。 (3)应用 PL/SQL 解决实际问题 【实验内容与步骤】 PL/SQL块中的可执行部分是由一系列语句组成的(包括对数据库进行操作的SQL语句,...
很容易的得到SQL函数的列表和用法描述(Show SQL help Window 按钮) 可以查看SQL语句的执行情况:通过下方的AutoTrace窗口 ,看到SQL语句的实际执行结果和执行效率。 支持历史SQL(F8) :可以方便的查询以前...
10.2.1 启动、暂停和停止SQL Server服务器 10.2.2 注册SQL Server 2000服务器 10.2.3 编辑SQL Server 2000注册信息 10.3 脚本概述 10.3.1 将数据库生成脚本 10.3.2 将指定表生成脚本 10.3.3 执行脚本 10.4 备份和...
10.2.1 启动、暂停和停止SQL Server服务器 10.2.2 注册SQL Server 2000服务器 10.2.3 编辑SQL Server 2000注册信息 10.3 脚本概述 10.3.1 将数据库生成脚本 10.3.2 将指定表生成脚本 10.3.3 执行脚本 10.4 备份和...
如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL Developer侧重于易用性、代码品质和生产力,充分发挥Oracle应用程序开发过程中的主要...
数据查询语言 (Data Query Language, DQL) 是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。例如:SELECT(查询) 数据控制语言Data Controlling Language(DCL),用来...