执行插入,然后登录一个SQL命令

时间:2008-09-16 18:18:37

标签: sql sql-server

我被要求实现一些代码,这些代码将更新MS SQL Server数据库中的行,然后使用存储过程将更新插入历史记录表中。我们无法添加存储过程来执行此操作,因为我们不控制数据库。我知道在存储过程中你可以进行更新,然后在另一个存储过程中调用execute。我可以使用一个SQL命令在代码中进行设置吗?

6 个答案:

答案 0 :(得分:1)

在同一个语句中运行它们(用分号分隔单独的命令)或者使用事务,这样如果第二个语句失败,你可以回滚第一个语句。

答案 1 :(得分:1)

你真的不需要存储过程。问题实际上归结为您是否可以控制所有插入。如果实际上您可以访问所有插入,则可以简单地将插入包装到数据表中,并在单个transasction中插入历史记录表。这将确保两者都完成“成功”。但是,当在事务中按顺序访问表时,您需要确保不锁定历史记录然后数据表,否则可能会出现死锁情况。

但是,如果您无法控制插入,则可以向某些数据库系统添加触发器,以便您访问已修改,插入或删除的数据。它可能会也可能不会为您提供所需的所有数据,例如谁进行了插入,更新或删除,但它会告诉您更改的内容。

答案 2 :(得分:0)

您还可以创建sql触发器。

答案 3 :(得分:0)

根据您的库,您通常可以将两个查询放在一个命令字符串中,用分号分隔。

答案 4 :(得分:0)

信息不足 - 什么是SQL服务器?为什么有历史表?

触发器会做这种事情。 MySQL的binlog可能对你更有用。

你说你不控制数据库。你控制访问它的代码吗?在那里添加日志记录并将其完全保留在SQL服务器之外。

答案 5 :(得分:0)

感谢大家的回复,下面是我最终做的事情的概要。现在进行测试,看看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;"