【问题标题】:Select From SQL Server Stored Procedure Resutls从 SQL Server 存储过程结果中选择
【发布时间】:2011-05-05 20:11:33
【问题描述】:

我正在将数百个存储过程从一台服务器迁移到另一台服务器,因此我想编写一个存储过程来在每台服务器上执行一个 SP 并比较输出的差异。

为了做到这一点,我通常会使用这种语法将结果放入表格中:

select * into #tmp1 from OpenQuery(LocalServer,'exec usp_MyStoredProcedure')
select * into #tmp2 from OpenQuery(RemoteServer,'exec usp_MyStoredProcedure')

然后我会将它们合并并进行计数,以获得结果中有多少行不同:

select * into #tmp3
from ((select * from #tmp1) union (select * from #tmp2))

select count(*) from #tmp1
select count(*) from #tmp3

但是,在这种情况下,我的存储过程包含一个OpenQuery,所以当我尝试将exec 放入OpenQuery 时,查询失败并出现错误:

The operation could not be performed because OLE DB provider "SQLNCLI"
for linked server "RemoteServer" was unable to begin a distributed transaction.

有什么好的解决方法吗?或者有人对我可以做些什么来加快这个过程有什么聪明的想法吗?因为现在,我似乎必须在每台服务器上运行 SP,将结果脚本写入 tmp 表,然后进行比较。这似乎是一个糟糕的解决方案!

感谢您抽出宝贵时间阅读本文,我们将不胜感激!

【问题讨论】:

    标签: sql-server sql-server-2005 distributed-transactions openquery


    【解决方案1】:

    我认为您的方法可行 - 您只需要启动 MSDTC。如果分布式事务处理协调器 (DTS) 服务被禁用或网络 DTC 访问被禁用,则会出现此问题。默认情况下,网络 DTC 访问在 Windows 中被禁用。正确运行和配置后,OLE DB 提供程序将能够启动分布式事务。

    Check out this for instructions- 适用于任何 Windows Server 2003 或 2008。

    【讨论】:

      【解决方案2】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-02
        • 1970-01-01
        • 2010-09-08
        • 1970-01-01
        • 1970-01-01
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多