我需要将存储过程的输出存储在#table
中
问题是我的程序的输出是一个70字段的表
所以,我不能在存储过程的输出之前创建#table
因为它需要很多努力。
我需要类似于select * into #table from Table_Name
的解决方案
女巫自动创建#table
答案 0 :(得分:2)
我在以下链接找到了解决方案:
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=85347
因此,要存储存储过程的输出,我们需要使用OPENROWSET()
函数
但在使用它之前,我们必须enable show advanced options
和
Ad Hoc Distributed Queries
以下是解决方案:
sp_configure 'show advanced options', 1
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE
GO
Select * into #temp
from OPENROWSET('SQLOLEDB','Data Source=Myserver;Trusted_Connection=yes;Integrated Security=SSPI', 'Execute DB_Name..Prc')
对于参数我可以将它们添加为字符串whit程序撤销声明
'Execute DB_Name..Prc'
+ CAST(parameter1 AS varchar(50)) + .....
+ CAST(parameter(n) AS varchar(50))
答案 1 :(得分:1)
我想你想要OPENROWSET。查看:http://msdn.microsoft.com/en-us/library/ms190312.aspx
请注意,这些示例尚未经过测试。
--Example for master.dbo.sp_who
SELECT * INTO #TempSpWho
FROM OPENROWSET ('SQLOLEDB','Server=(local);
TRUSTED_CONNECTION=YES;',
'set fmtonly off exec master.dbo.sp_who')
此外,如果您有SP的参数,则需要编写动态SQL:
DECLARE @testVariable varchar(10);
SET @testVariable = 'varTest';
EXEC( 'SELECT * INTO #TempSpWho
FROM
OPENROWSET(
''SQLNCLI'',
''Database=dbIDsAndNames;Uid=sa;Pwd=nosecurity;'',
''SET FMTONLY OFF
EXEC [dbo].[mySproc] ''' + @testVariable + ''')')
来源:http://www.dotnetspider.com/forum/163990-Working-with-Openrowset.aspx
注意:上面的例子都不是我最初创造的,所以如果你的工作可以归功于消息来源。
如果要手动构建临时表(即对所有70行不感兴趣),这将是方法:
CREATE TABLE #foo(
[bar] int,
baz varchar(123)
)
insert into #foo exec spDoSomething
select * from #foo
drop table #foo
答案 2 :(得分:0)
存储过程必须在其中使用一些select * from ..
语句来生成此输出。你可以修改它,对吗?