UPDATE语句修改了指定产品的名称。然后使用OUTPUT返回原始的和更新后的列名称
use AdventureWorks
go
DECLARE @ProductChanges TABLE
(
DeletedName nvarchar(50),
InsertedName nvarchar(50)
)
UPDATE Production.Product
SET Name='NL Spindle/Axle XYZ'
OUTPUT DELETED.Name,
INSERTED.Name
INTO @ProductChanges
WHERE ProductID=524
SELECT DeletedName,InsertedName
FROM @ProductChanges
为DELETE操作使用OUTPUT
use AdventureWorks
go
--创建一个保存数据的表
SELECT *
INTO Sales.Example_SalesTaxRate
FROM Sales.SalesTaxRate
--创建用于保存数据的表变量,从表中删除行,然后从变量中查询哪些行被删除
DECLARE @SalesTaxRate TABLE
(
SalesTaxRateID int NOT NULL,
StateProvinceID int NOT NULL,
TaxType tinyint NOT NULL,
TaxRate smallmoney NOT NULL,
Name dbo.Name NOT NULL,
rowguid uniqueidentifier,
ModifiedDate datetime NOT NULL
)
DELETE Sales.Example_SalesTaxRate
OUTPUT DELETED.*
INTO @SalesTaxRate
SELECT SalesTaxRateID,Name
FROM @SalesTaxRate
带OUTPUT的INSERT。
use AdventureWorks
go
--向表中插入一个新行,而且这个操作被捕获到一个表变量中
DECLARE @NewDepartment TABLE
(
DepartmentID smallint NOT NULL,
Name nvarchar(50) NOT NULL,
GroupName nvarchar(50) NOT NULL,
ModifiedDate datetime NOT NULL
)
INSERT HumanResources.Department
(Name,GroupName)
OUTPUT INSERTED.*
INTO @NewDepartment
VALUES ('Accounts Receivable','Accounting')
SELECT DepartmentID,ModifiedDate
FROM @NewDepartment
OUTPUT使用两个“虚拟”表INSERTED和DELETED,它们保存了已更新表的原始值和修改后的值。INSERTED和DELETED虚拟表与被修改的表具有同样的列名——在示例中返回原始的名字( DELETED. Name)和新的名字(INSERTED.Name)。