我已经创建了一个审计表,该表由我数据库中不同表上的审计跟踪(每次更新、删除和插入后触发)填充。现在,我被要求创建一个存储过程(脚本),以便使用审核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数据库和数据。
如果可能的话,我甚至更愿意使用变量从审计中检索表名,并在过程中使用它。这也给我带来了另一个错误。对这个程序的任何帮助都会很棒。
发布于 2018-05-08 13:03:50
这需要是动态SQL,因为您正在更新在变量中定义的列。执行以下操作以代替当前的UPDATE语句。
DECLARE @sql VARCHAR(1000) = ''
SET @sql = 'UPDATE [Production].[UnitMeasure] ' +
'SET ' + @COLUMN + ' = ''' + @OLD_VALUE + '''' +
'WHERE [Production].[UnitMeasure].[UnitMeasureCode] = ''' + @ID + ''''
EXEC(@sql)https://stackoverflow.com/questions/50223666
复制相似问题