Sql server 从SQL Server中的审核表回滚事务的过程

Sql server 从SQL Server中的审核表回滚事务的过程,sql-server,stored-procedures,rollback,audit,Sql Server,Stored Procedures,Rollback,Audit,我创建了一个审计表,该表由数据库中不同表上的审计跟踪(每次更新、删除和插入后触发)填充。现在,我被要求创建一个存储过程(脚本),以使用审核id回滚数据更改。我该如何操作。我写了一个看起来不错的剧本。SQL Server已接受该命令(命令已成功完成)。不幸的是,当我通过传递Audit_id来测试它时,命令已经完成,但数据没有回滚。这是我制定的程序。任何帮助都将不胜感激 create PROCEDURE [dbo].[spAudit_Rollback_2] @AUDIT_ID NVARCHAR(M

我创建了一个审计表,该表由数据库中不同表上的审计跟踪(每次更新、删除和插入后触发)填充。现在,我被要求创建一个存储过程(脚本),以使用审核id回滚数据更改。我该如何操作。我写了一个看起来不错的剧本。SQL Server已接受该命令(命令已成功完成)。不幸的是,当我通过传递Audit_id来测试它时,命令已经完成,但数据没有回滚。这是我制定的程序。任何帮助都将不胜感激

create  PROCEDURE [dbo].[spAudit_Rollback_2]
@AUDIT_ID NVARCHAR(MAX)

AS 
SET Nocount on

BEGIN
DECLARE  
@TABLE_NAME VARCHAR(100),
@COLUMN  VARCHAR(100),
@OLD_VALUE VARCHAR(200),
@ID        varchar(50)

SELECT @TABLE_NAME = TABLE_NAME FROM AUDIT;
SELECT @COLUMN = [COLUMN] FROM AUDIT;
SELECT @AUDIT_ID = AUDIT_ID FROM AUDIT;
SELECT @OLD_VALUE = OLD_VALUE FROM AUDIT
SELECT @ID  = ROW_DESCRIPTION FROM AUDIT;  

update [Production].[UnitMeasure]   
set @COLUMN = @OLD_VALUE  
WHERE  [Production].[UnitMeasure].[UnitMeasureCode] = @ID
END


[dbo].[spAudit_Rollback_2]'130F0598-EB89-44E5-A64A-ABDFF56809B5
这是相同的脚本,但使用adventureworks2017数据库和数据

如果可能的话,我甚至更愿意使用一个变量从审计中检索表名,并在过程中使用它。这也给了我另一个错误。
这一过程中的任何帮助都将非常棒

这需要是动态SQL,因为您正在更新在变量中定义的列。执行以下操作以代替当前的UPDATE语句

DECLARE @sql VARCHAR(1000) = ''
SET @sql = 'UPDATE [Production].[UnitMeasure] ' +
    'SET ' + @COLUMN + ' = ''' + @OLD_VALUE  + '''' +
    'WHERE  [Production].[UnitMeasure].[UnitMeasureCode] = ''' + @ID + ''''
EXEC(@sql)

在查询的where子句中使用传入的
@AUDIT\u ID
。例如,
从AUDIT中选择@OLD\u VALUE=OLD\u VALUE,其中AUDIT\u ID=@AUDIT\u ID
。另外,将所有单独的选择放入一个
SELECT。例如,从审计中选择@TABLE\u NAME=TABLE\u NAME,@COLUMN=[COLUMN],其中…
我做了更改-建议anu开始,但没有进展。请在UPDATE语句之前执行
打印@OLD\u VALUE
,并确定SELECT查询是否获得了您期望的值。打印@OLD\u VALUE返回所需的值。确定。我会把我的答案贴出来,这样可以正确格式化。非常感谢你。很抱歉,我正在做另外两个项目,所以这个项目不得不推迟,因为它不那么重要。它工作得很好。