在SQL Server应用中使用OUTPUT子句(上)

日期: 2009-09-29 作者:Roman Rehak翻译:曾少宁 来源:TechTarget中国 英文

现在大多数描述SQL Server 2005新特性的文章都关注于华而不实的特性,如SQLCLR或XML数据类型,而对许多老很好的老的T-SQL语言的改进没有得到应有的关注。我曾经从许多DBA口中听到令他们更兴奋的是看到T-SQL语言的改进,而不是那些新出现和发布的功能。对于SQL语言的一个很有用的实际改进是OUTPUT子句,它允许查询一个数据修改命令所影响的记录行。   本文将讨论OUTPUT子句在SQL Server中的具体应用。

我会向你介绍如何很容易地使用OUTPUT子句实现审计和数据修改存档等业务需求,以及其它相关的内容。   OUTPUT子句的基本原理是很简单的——它返回由每个INSE……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

现在大多数描述SQL Server 2005新特性的文章都关注于华而不实的特性,如SQLCLR或XML数据类型,而对许多老很好的老的T-SQL语言的改进没有得到应有的关注。我曾经从许多DBA口中听到令他们更兴奋的是看到T-SQL语言的改进,而不是那些新出现和发布的功能。对于SQL语言的一个很有用的实际改进是OUTPUT子句,它允许查询一个数据修改命令所影响的记录行。

  本文将讨论OUTPUT子句在SQL Server中的具体应用。我会向你介绍如何很容易地使用OUTPUT子句实现审计和数据修改存档等业务需求,以及其它相关的内容。

  OUTPUT子句的基本原理是很简单的——它返回由每个INSERT、UPDATE或DELETE命令所影响的记录行。OUTPUT可以在客户端应用程序中返回这些记录行,然后将它们插入到一个持久的或临时的表中,也可以将记录插入到一个表变量中。它的用法就是直接将OUTPUT子句附到任何一个INSERT/UPDATE/DELETE语句后。

  OUTPUT子句中可以引用INSERTED或DELETED虚拟表,这取决于是否想要在数据修改前(DELETED表)或修改后(INSERTED表)得到数据。这跟使用触发器去修改数据的操作是很相似的。

  注意:不能在一个INSERT语句中引用DELETED,也不能在一个DELETED语句中引用INSERTED,因为这些虚拟表在这两种情况下逻辑上是没有意义的,所以SQL Server不会去创建。

  既然我们已经了解了OUTPUT子句在SQL Server中的基本用法,下面让我们看一些它的例子和SQL Server中的实际应用。我将从创建一个简单的Employee表开始:

  CREATE TABLE dbo.Employees
  (
  EmployeeID INT NOT NULL IDENTITY(1, 1),
  FirstName VARCHAR(50) NOT NULL,
  LastName VARCHAR(50) NOT NULL,
  Status VARCHAR(20) DEFAULT 'Single'
  )

  下一步,我们要插入一行数据并加上OUTPUT来返回执行插入操作时所插入到应用中的记录:

   INSERT INTO dbo.Employees ( FirstName, LastName )
  OUTPUT INSERTED.*
  SELECT 'Susan', 'Kelley'

EmployeeIDFirstNameLastNameStatus
1SusanKelleySingle

  我们可以看到,SQL Server返回INSERT语句所插入的记录。这个技术对于查找服务器生成的值并返回给应用程序是很有用的,如标记字段或字段默认值。

翻译

曾少宁
曾少宁

TechTarget中国特约技术编辑,某高校计算机科学专业教师和网络实验室负责人,曾任职某网络国际厂商,关注数据中心、开发运维、数据库及软件开发技术。有多本关于思科数据中心和虚拟化技术的译著,如《思科绿色数据中心建设与管理》和《基于IP的能源管理》等。

相关推荐