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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ngbshzhn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值