WEB开发网
开发学院数据库MSSQL Server SQL 2005使用OUTPUT子句捕获数据插入时的标识值 阅读

SQL 2005使用OUTPUT子句捕获数据插入时的标识值

 2008-10-30 10:09:09 来源:WEB开发网   
核心提示: Product表有个ID字段作为主键,Productnumber是Product表中一个自然键,SQL 2005使用OUTPUT子句捕获数据插入时的标识值(2), ProductsToInsert表的有ProductNumber字段以及另外记录标识值的字段,向产品表插入记录时将会在该字段中

Product表有个ID字段作为主键。Productnumber是Product表中一个自然键。 ProductsToInsert表的有ProductNumber字段以及另外记录标识值的字段,向产品表插入记录时将会在该字段中记录标识值。

上面语句中,只取了450条产品信息作为Product数据表的初始化数据,取了全部504条记录作为ProductsToInsert数据表的初始化数据。

用来插入新的产品的脚本,挺简单的,如下所示:

  usetempdb
  GO
  INSERTProduct([Name],ProductNumber,ListPrice)
  SELECT
  [Name],ProductNumber,ListPrice
  FROM
  ProductsToInsertI
  WHERE
  NOTEXISTS(SELECT1
  FROMProduct
  WHEREProductNumber=I.ProductNumber)

该语句执行完后,在以前的表中不存在的54种产品将被插入到product表中。我们可以使用OUTPUT子句来得到所插入的行。具体语句如下所示:

  INSERTProduct([Name],ProductNumber,ListPrice)
  OUTPUTinserted.ProductID,
  inserted.[Name],
  inserted.ProductNumber,
  inserted.ListPrice
  SELECT
  [Name],ProductNumber,ListPrice
  FROM
  ProductsToInsertI
  WHERE
  NOTEXISTS(SELECT1FROMProduct
  WHEREProductNumber=I.ProductNumber)

该语句执行后,在客户端返回记录集

这差不多就是我们想要的了。我们得到了结果集的标识值,但我们没有利用这些数据,因为我们没法把它还原到原来的记录值。

我们还将需要增加两件事。首先,我们将需要储存此结果集保存到一个表值变量中。我会删除一些字段,使之更易于阅读;添加一个update语句以保存标识值。脚本如下所示:

Tags:SQL 使用 OUTPUT

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接