SQL 2005使用OUTPUT子句捕获数据插入时的标识值
2008-10-30 10:09:09 来源:WEB开发网在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
- ››SQL Server 2008 R2 下如何清理数据库日志文件
- ››sqlite 存取中文的解决方法
- ››SQL2005、2008、2000 清空删除日志
- ››SQL Server 2005和SQL Server 2000数据的相互导入...
- ››sql server 2008 在安装了活动目录以后无法启动服...
- ››使用word强大的搜索和替换功能
- ››sqlserver 每30分自动生成一次
- ››sqlite 数据库 对 BOOL型 数据的插入处理正确用法...
- ››使用Win7自带屏幕录制功能的方法
- ››sql server自动生成批量执行SQL脚本的批处理
- ››使用linux中的quota教程
- ››sql server 2008亿万数据性能优化
更多精彩
赞助商链接