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 @NewDepartmentOUTPUT使用两个“虚拟”表INSERTED和DELETED,它们保存了已更新表的原始值和修改后的值。INSERTED和DELETED虚拟表与被修改的表具有同样的列名——在示例中返回原始的名字( DELETED. Name)和新的名字(INSERTED.Name)。