Мне нужно сохранить вывод хранимой процедуры в #table
проблема в том, что вывод моей процедуры представляет собой таблицу из 70 полей
поэтому я не могу создать #table перед сохранением вывода процедуры
> Потому что это требует много усилий.
Мне нужно решение, похожее на select * into #table from Table_Name
с автоматическим созданием #table
сохранение вывода хранимой процедуры
Ответы (3)
Я нашел решение по следующей ссылке:
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')
И для параметров я могу добавить их в виде строки с оператором отзыва процедуры
'Execute DB_Name..Prc'
+ CAST(parameter1 AS varchar(50)) + .....
+ CAST(parameter(n) AS varchar(50))
Я думаю, вы хотите 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
Хранимая процедура должна использовать какой-то оператор select * from ..
внутри себя для создания этого вывода. Вы можете изменить это, верно?