快速业务通道

SQL SERVER 2005中全新的OUTPUT子句添加数据记录详解(理论篇)

作者 佚名技术 来源 数据库编程 浏览 发布时间 2012-03-21
引用了值的全部前像和后像,则将其返回。在 OUTPUT 子句中,TEXTPTR( ) 函数不能作为 text、ntext 或 image 列的表达式的一部分出现。

队列
可以在将表用作队列或将表用于保持中间结果集的应用程序中使用 OUTPUT。换句话说,应用程序不断地在表中添加或删除行。以下示例在 DELETE 语句中使用 OUTPUT 子句将已删除的行返回到执行调用的应用程序。

  复制代码
USE AdventureWorks;
GO
DELETE TOP(1) dbo.DatabaseLog WITH (READPAST)
OUTPUT deleted.*
WHERE DatabaseLogID = 7;
GO


此示例从用作队列的表中删除一行,并使用单个操作将已删除的值返回到处理应用程序。还可实现其他语义,例如使用表来实现堆栈。但是,SQL Server 并不保证由使用 OUTPUT 子句的 DML 语句处理和返回行的顺序。应用程序负责包括可保证所需语义的适当 WHERE 子句,或者理解当针对 DML 操作可能限定多行时,没有保证的顺序。以下示例使用子查询,并假定 DatabaseLogID 列具有唯一性特征才能实现所需的排序语义。

  复制代码
USE AdventureWorks;
GO
DELETE dbo.DatabaseLog
OUTPUT deleted.*
WHERE DatabaseLogID IN (SELECT TOP(5) DatabaseLogID FROM dbo.DatabaseLog ORDER BY PostTime);
GO


注意:  
如果您的方案允许多个应用程序从一个表中执行析构性读取,请在 UPDATE 和 DELETE 语句中使用 READPAST 表提示。这可防止在其他应用程序已经读取表中第一个限定记录的情况下出现锁定问题。  

参数
@table_variable
指定一个 table 变量,返回的行将插入该变量中而不是返回到调用方。@table_variable 必须在 INSERT、UPDATE 或 DELETE 语句之前声明。

如果未指定 column_list,则 table 变量必须与 OUTPUT 结果集具有相同的列数。标识列和计算列除外,这两种列必须跳过。如果指定了 column_list,则任何省略的列都必须允许空值,或者都分配有默认值。

output_table
指定一个表,返回的行将被插入该表中而不是返回到调用方。output_table 可以为临时表。

如果未指定 column_list,则表必须与 OUTPUT 结果集具有相同的列数。标识列和计算列例外,必须跳过这两种列。如果指定了 column_list,则任何省略的列都必须允许空值,或者都分配有默认值。

output_table 无法应用于以下情况:

具有启用的对其定义的触发器。
参与到外键约束双方的任意一方。
具有 CHECK 约束或启用的规则。
column_list
INTO 子句目标表上列名的可选列表。它类似于 INSERT 语句中允许使用的列列表。

scalar_expression
可取计算结果为单个值的任何符号和运算符的组合。只要子查询返回单个值,便可使用子查询。scalar_expression 中不允许使用聚合函数。

对修改的表中的列的任何引用都必须使用 INSERTED 或 DELETED 前缀限定。

column_alias_identifier
用于引用列名的替代名称。

DELETED
指定由更新或删除操作删除的值的列前缀。以 DELETED 为前缀的列反映 UPDATE 或 DELETE 语句完成之前的值。

不能在 INSERT 语句中同时使用 DELETED 与 OUTPUT 子句。

INSERTED
列的前缀,指定由插入操作或更新操作添加的值。以 INSERTED 为前缀的列反映 UPDATE 或 INSERT 语句完成之后但在触发器执行之前的值。

INSERTED 语句不能与 DELETE 语句的 OUTPUT 子句同时使用。

from_table_name
列的前缀,指定 DELETE 语句或 UPDATE 语句(用于指定要更新或删除的行)的 FROM 子句中所包含的表。

如果还在 FROM 子句中指定了要修改的表,则对该表中的列的任何引用都必须使用 INSERTED 或 DELETED 前缀限定。

*
指定受删除、插入或更新操作影响的所有列都将按照它们在表中的顺序返回。

例如,以下 DELETE 语句中

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号