首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Server中的审计表回滚事务的过程

问从Server中的审计表回滚事务的过程
EN

Stack Overflow用户
提问于 2018-05-07 23:11:37
回答 1查看 608关注 0票数 0

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

代码语言:javascript
复制
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数据库和数据。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-08 13:03:50

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

代码语言:javascript
复制
DECLARE @sql VARCHAR(1000) = ''
SET @sql = 'UPDATE [Production].[UnitMeasure] ' +
    'SET ' + @COLUMN + ' = ''' + @OLD_VALUE  + '''' +
    'WHERE  [Production].[UnitMeasure].[UnitMeasureCode] = ''' + @ID + ''''
EXEC(@sql)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50223666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档