辅导:SQL2005使用OUTPUT子句捕获数据插入时的标识值
来源:优易学  2011-10-31 12:53:56   【优易学:中国教育考试门户网】   资料下载   IT书店

  我们可以使用OUTPUT子句来得到所插入的行。具体语句如下所示:
  INSERT Product ([Name], ProductNumber, ListPrice)
  OUTPUT inserted.ProductID,
  inserted.[Name],
  inserted.ProductNumber,
  inserted.ListPrice
  SELECT
  [Name], ProductNumber, ListPrice
  FROM
  ProductsToInsert I
  WHERE
  NOT EXISTS (SELECT 1 FROM Product
  WHERE ProductNumber = I.ProductNumber)
  这差不多就是我们想要的了。我们得到了结果集的标识值,但我们没有利用这些数据,因为我们没法把它还原到原来的记录值。
  我们还将需要增加两件事。首先,我们将需要储存此结果集保存到一个表值变量中。我会删除一些字段,使之更易于阅读;添加一个update语句以保存标识值。脚本如下所示:
  DECLARE @InsertedRows TABLE (ProductID INT, ProductNumber NVARCHAR(25) )
  INSERT Product ([Name], ProductNumber, ListPrice)
  OUTPUT inserted.ProductID,
  inserted.ProductNumber
  INTO @InsertedRows
  SELECT
  [Name], ProductNumber, ListPrice
  FROM
  ProductsToInsert AS I
  WHERE
  NOT EXISTS (SELECT 1 FROM Product
  WHERE ProductNumber = I.ProductNumber)
  UPDATE ProductsToInsert
  SET InsertedIdentityValue = T.ProductID
  FROM ProductsToInsert I
  JOIN @InsertedRows T ON T.ProductNumber = I.ProductNumber
  SELECT RowID, ProductNumber, InsertedIdentityValue
  FROM ProductsToInsert
  WHERE InsertedIdentityValue IS NOT NULL
  我们定义了一个表变量来存储OUTPUT子句的结果。我们使用OUTPUT into这个语法将结果存储到表变量中。
  下一步我们使用表变量,根据插入的标识列更新源表。
  最后,一个简单的SELECT语句返回新的数值,我们可以很容易地在其他语句中使用这些数值。
  OUTPUT 子句对于在 INSERT操作之后检索标识列或计算列的值可能非常有用。另外OUTPUT子句也可以在UPDATE和DELETE语句中使用,从插入表或删除表中得到数值,并返回这些数值。青年人网站提示如果将参数或变量作为 UPDATE 语句的一部分进行了修改,则 OUTPUT 子句将始终返回语句执行之前的参数或变量的值而不是已修改的值。
  以下语句中不支持 OUTPUT 子句:
  l 引用本地分区视图、分布式分区视图或远程表的 DML 语句。
  l 包含 EXECUTE 语句的 INSERT 语句。
  l 不能将 OUTPUT INTO 子句插入视图或行集函数。
  简洁的OUTPUT子句,使得向SQL Server导入数据的操作得到了极大的简化。

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训