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

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

 2008-10-30 10:09:09 来源:WEB开发网   
核心提示:在insert语句或者delete语句执行后,SQL Server只返回受影响的记录行的总数,SQL 2005使用OUTPUT子句捕获数据插入时的标识值,如果我们想知道到底所插入/所删除的记录的具体信息的话,这就有点复杂了,并且你需要将这些新行插入到多个表格中,下面的脚本将根据AdventureWorks数据库中的记录

在insert语句或者delete语句执行后,SQL Server只返回受影响的记录行的总数,如果我们想知道到底所插入/所删除的记录的具体信息的话,这就有点复杂了。在SQL Server 2005之前的版本中,如果希望从已插入和已删除的虚拟表中捕获数据,我们只能通过触发器来实现。在SQL Server 2005中,我们可以利用OUTPUT子句来实现这个功能。我们可以在insert ... SELECT语句使用OUTPUT子句,捕获所有插入的标识值。以前这需要某种类型的循环或暂时改变目标表才能实现。

下面通过具体例子来详细介绍如何使用OUTPUT子句。

我们新建两个数据表:一个product产品表,一个ProductsToInsert待插入的产品表。假设供应商向您发送了一个完整的列出所有的产品,但你只需要插入之前不存在的记录。并且你需要将这些新行插入到多个表格中。

下面的脚本将根据AdventureWorks数据库中的记录,在tempdb数据库中创建表。

  USEtempdb
  GO
  IFEXISTS(SELECT*FROMsys.objects
  WHEREobject_id=OBJECT_ID(N'[dbo].[Product]')ANDtypein(N'U'))
  DROPTABLE[dbo].[Product]
  GO
  IFEXISTS(SELECT*FROMsys.objects
  WHEREobject_id=OBJECT_ID(N'[dbo].ProductsToInsert')ANDtypein(N'U'))
  DROPTABLE[dbo].ProductsToInsert
  GO
  --创建Product表
  CREATETABLEProduct(
  ProductIDINTNOTNULLIDENTITY(1,1)PRIMARYKEY,
  [Name]NVARCHAR(50)NOTNULL,
  ProductNumberNVARCHAR(25)NOTNULL,
  ListPriceMONEYNOTNULL)
  GO
  CREATEUNIQUEINDEXIX_Product_ProductNumberONProduct(ProductNumber)
  GO
  --创建ProductsToInsert表
  CREATETABLEProductsToInsert(
  RowIDINTNOTNULLIDENTITY(1,1)PRIMARYKEY,
  [Name]NVARCHAR(50)NOTNULL,
  ProductNumberNVARCHAR(25)NOTNULL,
  ListPriceMONEYNOTNULL,
  InsertedIdentityValueINTNULL)
  GO
  --向Product表插入数据
  INSERTProduct([Name],ProductNumber,ListPrice)
  SELECTTOP450[Name],ProductNumber,ListPrice
  FROMAdventureWorks.Production.Product
  ORDERBYSellStartDate,ProductID
  GO
  --向ProductToInsert表插入数据
  INSERTProductsToInsert([Name],ProductNumber,ListPrice)
  SELECT[Name],ProductNumber,ListPrice
  FROMAdventureWorks.Production.Product
  GO

1 2 3  下一页

Tags:SQL 使用 OUTPUT

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