SQL Server插入。 。 。执行声明

时间:2012-10-02 07:34:22

标签: sql tsql

我创建了一个存储过程来返回包含大约60列的记录。但是,我想在我的项目的另一部分中从相同的存储过程中选择它返回的60列中的40个。如何正确指定我需要返回哪些列?实质上是什么规则,如果有的话

插入#TempTable (......) Exec StoredProcedure

2 个答案:

答案 0 :(得分:0)

规则非常简单。 SP中的选择必须具有与#Temptable一样多的列,并且列(如果不是完全相同的类型)必须是兼容的或可共同的,例如, int进入VARCHAR。

如果必须从60列中选择40列,则必须通过2个临时表传递它,或者使用涉及OPENQUERY等的黑客将SP调用视为远程数据集。

答案 1 :(得分:0)

您可以使用许多输出参数或一个NVARCHAR(MAX)输出参数。您可以将其初始化为:

'SELECT '+ Col01.Value + ','+ Col02.Value + ',' ...  + ',' +  Col40.Value

因此,您的商店程序将返回如下内容:

'SELECT 10,50,''2012-10-02'',''Joro'''

然后你可以这样做:

 DECLARE @OUTPUT NVARCHAR(MAX)='SELECT 10,50,''2012-10-02'',''Joro'''

 EXEC sp_executesql @OUTPUT

另外,请在此处查看此解决方案:

Insert results of a stored procedure into a temporary table