SQL Server,远程存储过程和DTC事务

时间:2008-09-22 16:22:45

标签: sql sql-server msdtc

我们的组织在大型机Adabas数据库中有很多基本数据。我们对此数据进行了ODBC访问,并且使用ODBC / Natural“存储过程”从C#中成功查询/更新了它。

我们现在能够做的是从SQL Server 2005存储过程中查询大型机表,将结果转储到表变量中,按摩它,然后将结果与本机SQL数据结合起来集。

当我们选择它时,从SQL执行Natural proc工作正常;但是,当我们将结果插入到表变量中时,SQL似乎正在启动分布式事务,而这反过来似乎会对我们的连接造成严重破坏。

鉴于我们没有执行更新,是否可以关闭此DTC升级行为?

有关正确设置DTC以与DataDirect(以前称为Neon Systems)Shadow ODBC驱动程序通信的任何提示吗?

4 个答案:

答案 0 :(得分:2)

查看SET REMOTE_PROC_TRANSACTIONS OFF哪个应禁用它。 或sp_serveroption通常配置链接服务器,而不是每批配置。

因为您在MS SQL端编写,所以启动事务。 默认情况下,无论是否需要,它都会升级。 即使表变量没有参与事务。

我之前遇到过类似的问题,根据MS SQL写入的情况,MS SQL端在存储过程和其他内容中的行为方式不同。我找到的最可靠的方法是对Sybase链接服务器使用动态SQL调用...

答案 1 :(得分:1)

以下代码为链接服务器设置“启用分布式事务的促销”:

USE [master]
GO
EXEC master.dbo.sp_serveroption @server=N'REMOTE_SERVER', @optname=N'remote proc transaction promotion', @optvalue=N'false'
GO

这将允许您将链接服务器存储过程调用的结果插入表变量。

答案 2 :(得分:0)

我不确定DTC,但DTSX(Integration Services)可能对移动数据很有用。但是,如果您只是查询数据,则可能需要查看添加链接服务器以进行直接访问。然后,您可以根据链接服务器表中的选择编写一个简单的查询来填充表。

答案 3 :(得分:0)

这是真的。正如您可能猜到的那样,我们要调用的自然过程执行查找和计算,如果可能的话,我们希望保留在该级别。