加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

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

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

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

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

USE tempdb
GO
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[Product]') AND type in (N'U'))
DROP TABLE [dbo].[Product]
GO
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].ProductsToInsert') AND type in (N'U'))
DROP TABLE [dbo].ProductsToInsert
GO
--创建Product表
CREATE TABLE Product (
ProductID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[Name] NVARCHAR(50) NOT NULL,
ProductNumber NVARCHAR(25) NOT NULL,
ListPrice MONEY NOT NULL)
GO
CREATE UNIQUE INDEX IX_Product_ProductNumber ON Product ( ProductNumber )
GO
--创建ProductsToInsert表
CREATE TABLE ProductsToInsert (
RowID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[Name] NVARCHAR(50) NOT NULL,
ProductNumber NVARCHAR(25) NOT NULL,
ListPrice MONEY NOT NULL,
InsertedIdentityValue INT NULL)
GO
--向Product表插入数据
INSERT Product ([Name], ProductNumber, ListPrice)
SELECT TOP 450 [Name], ProductNumber, ListPrice
FROM AdventureWorks.Production.Product
ORDER BY SellStartDate, ProductID
GO
--向ProductToInsert表插入数据
INSERT ProductsToInsert ([Name], ProductNumber, ListPrice)
SELECT [Name], ProductNumber, ListPrice
FROM AdventureWorks.Production.Product
GO

(编辑:源码门户网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读