2011-02-10 5 views

답변

4

이것을 실현하려면, OpenRowset를 사용할 필요가 있습니다. 그 다음 다른 옵션을 설정을 변경 할 수없는 경우 코멘트에 마틴 논의 된 바와 같이,

sp_configure 'Show Advanced Options', 1 
GO 
RECONFIGURE 
GO 
sp_configure 'Ad Hoc Distributed Queries', 1 
GO 
RECONFIGURE 
GO 

이 다음과 같은 옵션을 수행하기 위해

Select Field0, Field2 From Table 
Where Field0 in (
       SELECT Field0 FROM OPENROWSET('SQLNCLI', 
          'Server=SERVERNAME;Trusted_Connection=yes;', 
          'EXEC StoredProc') 
       ) 

서버에서 사용할 수 있어야합니다 , 임시 테이블을 채우는 것입니다.

예컨대

declare @t table 
(
Field0 int, 
Field1 varchar(100) 
... 
) 

Insert Into @t 
Exec storedProcedure 

Select Field0, Field2 From Table 
Where Field0 in (
       SELECT Field0 FROM @t 
       ) 

임시 테이블에 저장 프로 시저의 결과를 삽입하려면 임시 테이블의 정의가 저장 프로 시저의 결과와 정확하게 일치해야합니다.

+0

+1 이렇게하면 서버에 새로운 연결이 다시 열립니다. –

+0

@ Martin - 네, 그렇습니다.이 일을하는 다른 방법을 생각할 수 없습니까? Table Functions를 사용하는 것 외에는 OP가 SP를 정말로 바꾸고 싶지 않다는 인상을받습니다. – codingbadger

+0

OP는 또한 중간 테이블 변수와 INSERT INTO @T EXEC storedproc을 추가 한 다음 IN 절에 사용합니다. –

2

저장 프로 시저가 이러한 경우에 사용할 수없는 그것의 복잡성이다. 그러나, IN의 인수로서 올바른 테이블 값 함수를 사용할 가능성을 검토하십시오

+0

+1 저장 프로 시저를 TVF로 다시 팩터링하면 나에게 가장 좋은 해결책이 들립니다. –

2

저장 프로 시저를 사용할 수 없습니다. 테이블을 반환하는 함수를 사용해야합니다. 예를 들어 :

CREATE FUNCTION myFunction(@arg varchar(30)) 
RETURNS @myTable table(Value INT) 
AS 
BEGIN 
    insert into @myTable(Value) values (1)  
    RETURN 
END 

지금 당신은 당신의 쿼리의 일부로서 기능을 실행할 수 있습니다

Select field0, field2 FROM Table 
WHERE field0 in (select Value from myFunction('arg')) 
관련 문제