簡體   English   中英

Exec存儲過程進入動態臨時表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM