gpt4 book ai didi

sql-server - 我可以从 MS SQL 的事务中排除存储过程吗?

转载 作者:行者123 更新时间:2023-12-02 16:43:07 25 4
gpt4 key购买 nike

对于我的问题:我从我的业务代码调用存储过程。此调用是在显式事务中。存储过程有时会调用另一个存储过程将某些内容写入数据库。即使事务回滚,此数据也应保留在数据库中。类似的场景是当你想在日志表中写入一些内容并且应该保留日志消息时(这不是我的情况,这只是一个类似的要求)。

如何从外部事务中排除第二个存储过程?我认为我正在 Oracle 中寻找类似“自主事务”的东西。我寻找可能的模拟,但所有解决方案看起来都不太“好”(创建环回服务器,添加一些 .NET 方法,...)

有什么想法吗?谢谢!

最佳答案

虽然这种问题似乎很常见,但没有优雅的解决方案。 开始事务提交回滚之间的所有事情都是作为一个整体完成的。例如,您不能只在日志表中插入一行,并在最终回滚后保留该行。

但是你可以做一些技巧。

1) 使用 xp_cmdshell 调用您的过程来调用 OSQL.exe。性能会很差,但是外部命令不参与事务,并且没有什么可以阻止您从外部执行 SQL 语句。

2) 在存储过程中,您可以将记录添加到表变量而不是真实的表中。表变量不参与事务,因为它们不会更改数据库。然后,当您以任一方式关闭事务时,将变量的内容附加到表中。

3) 如果您无法更改内部过程,您可以在调用之后但从仍然打开的事务中获取它可能确实创建到表变量中的记录。回滚事务并将获取的记录再次追加到表中。

关于sql-server - 我可以从 MS SQL 的事务中排除存储过程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26236610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com