执行插入,然后登录一个SQL命令
时间:2020-03-05 18:56:45 来源:igfitidea点击:
我被要求实现一些代码,这些代码将更新MS SQL Server数据库中的一行,然后使用存储的proc将更新插入历史表中。我们无法添加存储的proc来执行此操作,因为我们无法控制数据库。我知道我们可以在存储过程中进行更新,然后在另一个存储过程中调用execute。我可以使用一个SQL命令将其设置为在代码中执行此操作吗?
解决方案
回答
我们也可以创建sql触发器。
回答
根据库,通常可以将两个查询放在一个命令字符串中,并用分号分隔。
回答
信息不足-什么是SQL Server?为什么有历史记录表?
触发器将执行此类操作。 MySQL的binlog可能对我们更有用。
我们说我们不控制数据库。我们控制访问它的代码吗?在此处添加日志记录,并将其完全排除在SQL Server之外。
回答
可以在同一条语句中运行它们(以分号分隔单独的命令),也可以使用事务来运行它们,以便在第二条失败时回退第一条语句。
回答
我们实际上并不需要为此存储的proc。问题的实质归结为我们是否可以控制所有插入物。如果实际上我们可以访问所有插入,则只需将插入包装到数据表中,然后将插入包装到历史表中就可以。这将确保两者都完成,以使"成功"发生。但是,在事务中按顺序访问表时,我们需要确保不先锁定historytable再锁定datatable,否则可能会出现死锁情况。
但是,如果我们无法控制插入,则可以将触发器添加到某些数据库系统,从而使我们可以访问已修改,插入或者删除的数据。它可能会或者可能不会为我们提供所需的所有数据,例如谁进行了插入,更新或者删除,但它会告诉我们更改了什么。
回答
谢谢大家的答复,以下是我最后要做的工作提要。现在测试一下,如果发生故障,trans是否实际上会回滚。
sSQL = "BEGIN TRANSACTION;" & _ " Update table set col1 = @col1, col2 = @col2" & _ " where col3 = @col3 and " & _ " EXECUTE addcontacthistoryentry @parm1, @parm2, @parm3, @parm4, @parm5, @parm6; " & _ "COMMIT TRANSACTION;"