动态SQL-通过执行存储过程插入临时表

动态SQL-通过执行存储过程插入临时表,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我遇到了一个问题,这个问题与这里已经回答过的其他问题有着非常细微的不同 我有一个存储过程,它有一个参数,并根据该参数返回不同的结果和列数。在这个存储过程中,我创建了一个名为FreightData的表。该存储过程的结尾如下所示: IF @IncludeIDs = 0 BEGIN select [Buyer], [Contract], [Product], [Shipowner], [DespatchOrder] from #FreightData END ELSE BEGIN

我遇到了一个问题,这个问题与这里已经回答过的其他问题有着非常细微的不同

我有一个存储过程,它有一个参数,并根据该参数返回不同的结果和列数。在这个存储过程中,我创建了一个名为FreightData的表。该存储过程的结尾如下所示:

IF @IncludeIDs = 0 
BEGIN 
    select [Buyer], [Contract], [Product], [Shipowner], [DespatchOrder] from  #FreightData
END
ELSE 
BEGIN
    select * from #FreightData
END
所有这些都是成功的

然后,在另一个名为[FreightProfile]的存储过程中,我试图用以下结果填充临时表:

EXEC [dbo].[EXCEL_FreightData] @IncludeIDs = 1
我使用了与[EXCEL_FreightData]中完全相同的创建表定义,使用了不同的表名-FreightProfile_results,并尝试使用

INSERT INTO #FreightProfile_results
EXEC [dbo].[EXCEL_FreightData] @IncludeIDs = 1
但是,我得到了一个错误:

提供的值的列名或数目与表定义不匹配

我正在尝试一个使用OPENROWSET的解决方案,这样我就不必提供表定义来解决这个问题,但是如果有人对上述问题有任何建议,我将不胜感激

我的错

我在表定义中复制了以下内容,因此出现了问题

[ID] [int] identity (1,1) Not Null
我的错

我在表定义中复制了以下内容,因此出现了问题

[ID] [int] identity (1,1) Not Null

尝试执行过程以检查列列表是否正确。通常,您可以避免从存储的过程中产生不一致的签名。最好将其设置为表值函数,可以使用select语句。然后你的内部TVF总是做同样的事情,你把你喜欢的包含/排除逻辑放在外部包装SP中,而不是放在两个不同的地方,这很容易引入错误和维护开销,从而执行检查列列表是否正确的过程。通常,您可以避免从存储的过程中产生不一致的签名。最好将其设置为表值函数,可以使用select语句。然后,您的内部TVF总是做同样的事情,并且您将您的想法仅放在外部包装SP中,而不是放在两个单独的位置,这很容易引入bug和维护开销