2013-11-29 6 views
14

알기. 내가하고 싶은 일은 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 

분명히 비참하게 실패 :

내 마지막 필사적 인 시도는 다음과 같이 갔다.

+3

그래서 테이블을 반환하는 저장 프로 시저 대신 테이블 반환 함수 또는 테이블 변수를 사용해야합니다. 어쨌든 OPENROWSET이 당신을위한 해결책이 될 수도 있습니다 – adrianm

+0

@adrianm UDF에 대한 귀하의 의견이 실제로 내 문제를 해결했습니다. 나는 내가 전에 그것을 보지 못했다고 믿을 수 없다. – JAT

+0

[임시 테이블에 저장 프로 시저 결과 삽입] 가능한 중복 (http://stackoverflow.com/questions/653714/insert-results-of-a-stored-procedure-into-a-temporary- table) –

답변

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

SELECT * FROM #TempTable 
+0

보안 위험이 아닌 OPENROWSET을 활성화합니까? – JAT

+0

어느 정도까지는 그렇습니다. 그러나 AFAIK – Raj

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 
+0

요구 사항을 충족하는 다른 방법은 없습니다. 질문은 "Oky이므로 지금은 완벽하게 작동하지만 저장 프로 시저의 구조가 변경되면 어떻게 될까요?" 그래서 이것은 좋은 해결책이 아닙니다. – CLS

+0

나는 의견에 동의합니다 : Adriaan Davel Jul 20 '16 at 9:15 위의 그의 코멘트를 참조하십시오. –

0

이 OPENROWSET FROM

SELECT * INTO #tempTable ('SQLNCLI', '서버 = localhost를; Trusted_Connection = 예;'OPENROWSET 사용하는 것이 더 쉬운 방법입니다, 'EXEC OtherDb.DataProd을. abc ')

+0

답변을 드릴 설명을 추가하십시오. –

관련 문제