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

时间:2020-03-06 14:32:57  来源:igfitidea点击:

我们的组织在大型机Adabas数据库中拥有许多重要数据。我们可以通过ODBC访问此数据,并且可以使用ODBC /自然"存储过程"从Chave查询/成功更新它。

我们现在想要做的是从SQL Server 2005存储的proc中查询大型机表,将结果转储到表变量中,对其进行按摩,然后将结果与作为结果集的本机SQL数据连接起来。

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

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

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

解决方案

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

确实如此。我们可能会猜到,我们希望调用的Natural过程进行查找和计算,如果可能的话,我们希望将其保持在该级别。

检出" SET REMOTE_PROC_TRANSACTIONS OFF",该功能应将其禁用。
或者使用" sp_serveroption"来配置链接服务器,而不是每批。

因为我们是在MS SQL端编写,所以我们开始事务。
默认情况下,它会升级是否需要。
即使表变量不参与事务。

在基于存储过程和其他内容中是​​否编写MS SQL之前,MS SQL方面的行为有所不同之前,我遇到过类似的问题。我找到的最可靠的方法是对Sybase链接服务器使用动态SQL调用。

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

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

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