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

    技术2022-07-21  82

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

    Processed: 0.009, SQL: 9