[英]Exec stored procedure into dynamic temp table
據我所知; 我想做的事情在sql中是不可能的,但值得問你們。
假設我有一個存儲過程abc,它返回列Id和Value。 由於功能原因,此存儲過程主要由其他部門使用,我將不時地使用它來進行數據檢查。
所以使用它作為我的存儲過程的一部分:
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
插入臨時表。 我知道這可以在2008年及以上工作,不確定2005年。您的臨時表列必須與您的存儲過程列匹配。
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')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.