Хранимая процедура Exec в динамическую таблицу temp

Насколько я знаю; то, что я хочу сделать, невозможно в sql, но стоит спросить вас, ребята.

Допустим, у меня есть хранимая процедура abc, которая возвращает идентификаторы столбцов и значение. Эта хранимая процедура в основном используется другими отделами по функциональным соображениям, и я буду использовать ее только время от времени для проверки данных.

Таким образом, используя его как часть моей хранимой процедуры:

DECLARE @tABC TABLE
(
   ID      INT,
   Value   DECIMAL(12,2)
)

INSERT INTO @tABC
   EXEC OtherDb.DataProd.abc

Oky, так что теперь это будет отлично работать, но что, если они изменят структуру хранимой процедуры?

Добавление или удаление столбца из хранимой процедуры приведет к поломке моего кода, так что есть способ сделать мой код более гибким.

Моя последняя отчаянная попытка сделала что-то вроде этого:

WITH tempTable AS
(
    EXEC OtherDb.DataProd.abc
)
SELECT ID, Value FROM tempTable

Который, очевидно, потерпел неудачу.

Ответы

Ответ 1

SELECT * INTO #TempTable 
FROM OPENROWSET
('SQLNCLI','Server=(local)\SQL2008R2;Trusted_Connection=yes;',
     'EXEC OtherDb.DataProd.abc')

SELECT * FROM #TempTable

Ответ 2

Вставить в таблицу temp. Я знаю, что это работает в 2008 году и выше, не уверен в 2005 году. Ваши столбцы таблицы temp должны соответствовать столбцам Stored Proc.

create table #mytable (custid int,company varchar(50),contactname varchar(50)
                , phone varchar(50),address1 varchar(50)
                , address2 varchar(50),city varchar(50)
                ,st varchar(2),zip varchar(20))

insert into #mytable (custid,company,contactname,phone,address1,address2,city,st,zip)
exec dbo.sp_Node_CustomerList_wService @segid = 1

select * from #mytable
where custid = 5

drop table #mytable

Ответ 4

это лучший и простой способ использования openrowset

SELECT * INTO #tempTable FROM OPENROWSET ('SQLNCLI', 'Server = localhost; Trusted_Connection = yes;', 'EXEC OtherDb.DataProd.abc')