我有一个案例,我需要以下序列用于我们的内部工具,这些工具必须协同工作以准备用于测试目的的数据库。
program1
启动、开始数据库事务并退出 program2
启动并加入同一个数据库事务,执行一堆语句并退出 program3
还启动并加入同一个数据库事务,执行一堆语句并退出 program4
开始并决定是否/何时回滚事务 这些程序是 .Net 命令行应用程序。
我研究了
MSDTC
/TransctionScope
但我找不到任何程序启动事务然后退出同时让事务打开以供其他程序加入的情况。这是可行的吗?
编辑(可能的解决方案):
我测试了
sp_getbindtoken
/ sp_bindsession
它会起作用:program1
会这样做(在 .Net 代码中)begin transaction
DECLARE @bind_token varchar(255);
EXECUTE sp_getbindtoken @bind_token OUTPUT;
print @bind_token
并返回/写入 bind_token
到其他程序可以获取 token 并加入交易的文件:sp_bindsession ':7:FliJ.4AShUOIOjb<6^]5---0aE=--'
//Do stuff
rollback transaction
但是program1
必须在整个过程中保持事件状态才能在其他程序加入/离开 session 时保持 session 事件。这个 api 的文档指出:
This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.
最佳答案
SQL 事务被锁定到它们的连接。不能通过多个应用程序共享连接。
然而,实现您的目标的一种方法是将来自所有应用程序的查询代理到实际保存连接及其事务的单个应用程序。
关于.net - 是否可以在多个程序之间共享 SQL Server 事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51791689/