Exec存储过程进入动态临时表

时间:2013-11-29 07:03:14

标签: sql sql-server tsql stored-procedures

据我所知;我想做的事情在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

这显然是悲惨地失败了。

4 个答案:

答案 0 :(得分:8)

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

SELECT * FROM #TempTable

答案 1 :(得分:6)

插入临时表。我知道这适用于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

答案 2 :(得分:0)

否则请查看此处,有更多选项可供选择:Insert results of a stored procedure into a temporary table

答案 3 :(得分:0)

使用openrowset是更好更简单的方法

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