Ответ 1
SELECT * INTO #TempTable
FROM OPENROWSET
('SQLNCLI','Server=(local)\SQL2008R2;Trusted_Connection=yes;',
'EXEC OtherDb.DataProd.abc')
SELECT * FROM #TempTable
Насколько я знаю; то, что я хочу сделать, невозможно в 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
Который, очевидно, потерпел неудачу.
SELECT * INTO #TempTable
FROM OPENROWSET
('SQLNCLI','Server=(local)\SQL2008R2;Trusted_Connection=yes;',
'EXEC OtherDb.DataProd.abc')
SELECT * FROM #TempTable
Вставить в таблицу 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
В противном случае просмотрите здесь, там есть дополнительные опции: Вставить результаты хранимой процедуры во временную таблицу?
это лучший и простой способ использования openrowset
SELECT * INTO #tempTable FROM OPENROWSET ('SQLNCLI', 'Server = localhost; Trusted_Connection = yes;', 'EXEC OtherDb.DataProd.abc')