程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL 2005使用OUTPUT子句捕獲數據插入時的標識值

SQL 2005使用OUTPUT子句捕獲數據插入時的標識值

編輯:關於SqlServer

在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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved