SqlServer2008实例16捕获和跟踪数据修改的改变之一返回数据修改语句影响的行

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

SqlServer2008实例16捕获和跟踪数据修改的改变之一返回数据修改语句影响的行_第1张图片

带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)。

你可能感兴趣的:(#,SqlServer2008实例)