Sql server 包含执行计划时,远程过程调用失败

Sql server 包含执行计划时,远程过程调用失败,sql-server,sql-server-2012,ssms,sql-execution-plan,Sql Server,Sql Server 2012,Ssms,Sql Execution Plan,我这里有一个非常奇怪的错误,我无法理解 以下T-SQL: CREATE TABLE #Contribs ( ID VARCHAR(100), Contribution FLOAT ) INSERT INTO #Contribs EXEC [linkedserver].[catalogue].[schema].LocalContrib SELECT * FROM #Contribs 在我的服务器中创建一个简单的临时表,用链接服务器中的数据填充它并查看数据 当我自己运行远程过程时,它会为我提供一个

我这里有一个非常奇怪的错误,我无法理解

以下T-SQL:

CREATE TABLE #Contribs ( ID VARCHAR(100), Contribution FLOAT )
INSERT INTO #Contribs
EXEC [linkedserver].[catalogue].[schema].LocalContrib
SELECT * FROM #Contribs
在我的服务器中创建一个简单的临时表,用链接服务器中的数据填充它并查看数据

当我自己运行远程过程时,它会为我提供一个(文本、浮点)对的列表

当我在不请求实际执行计划的情况下运行整个T-SQL时,它会在temp表中正确地显示这个对列表

当我运行整个T-SQL及其实际执行计划时,它失败并返回消息“列名称或提供的值的数量与表定义不匹配”

有人知道为什么会这样吗?或者我能做些什么?在我看来,执行计划的显示应该干扰语句本身的执行,这似乎有悖常理。这相当烦人,因为我希望检查包含此代码的父存储过程的执行计划。我不知道调用的过程“LocalContrib”在内部是什么样子的,我正在运行SQL Server 2012


谢谢。

这似乎是一个已知问题,请参阅。他们声称它在“下一个service pack”中已修复,但我在SP2修复列表中找不到对此的描述。它可能在CU中,或者是SP3。没有官方的解决办法。谢谢Jeroen,很好的发现。不过还是有点令人沮丧!