сохранение вывода хранимой процедуры

Мне нужно сохранить вывод хранимой процедуры в #table
проблема в том, что вывод моей процедуры представляет собой таблицу из 70 полей
поэтому я не могу создать #table перед сохранением вывода процедуры
> Потому что это требует много усилий.
Мне нужно решение, похожее на select * into #table from Table_Name
с автоматическим созданием #table


person Alaa    schedule 09.04.2011    source источник
comment
не бойся мой друг, мы получили ответ   -  person Alaa    schedule 09.04.2011
comment
Возможно, это может помочь stackoverflow.com/questions/3829201/   -  person adopilot    schedule 09.04.2011


Ответы (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))
person Alaa    schedule 09.04.2011

Я думаю, вы хотите 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')

Источник: http://blogs.technet.com/b/wardpond/archive/2005/08/01/the-openrowset-trick-accessing-stored-procedure-output-in-a-select-statement..aspx


Далее, если у вас есть параметры для 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
person Gibron    schedule 09.04.2011
comment
Без проблем; счастлив, что ты разобрался. - person Gibron; 09.04.2011

Хранимая процедура должна использовать какой-то оператор select * from .. внутри себя для создания этого вывода. Вы можете изменить это, верно?

person Hari Menon    schedule 09.04.2011
comment
да, но эта процедура принимает некоторые параметры, поэтому вывод каждый раз разный, когда я использую процедуру - person Alaa; 09.04.2011