IN 절 내에서 저장 프로 시저를 호출 할 수 있습니까?SQL Server의 IN 절에서 저장 프로 시저를 호출합니까?
Select field0, field2 FROM Table
WHERE field0 in (exec storedproc)
프로 시저에 대한 이유는
IN 절 내에서 저장 프로 시저를 호출 할 수 있습니까?SQL Server의 IN 절에서 저장 프로 시저를 호출합니까?
Select field0, field2 FROM Table
WHERE field0 in (exec storedproc)
프로 시저에 대한 이유는
이것을 실현하려면, 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
)
임시 테이블에 저장 프로 시저의 결과를 삽입하려면 임시 테이블의 정의가 저장 프로 시저의 결과와 정확하게 일치해야합니다.
+1 이렇게하면 서버에 새로운 연결이 다시 열립니다. –
@ Martin - 네, 그렇습니다.이 일을하는 다른 방법을 생각할 수 없습니까? Table Functions를 사용하는 것 외에는 OP가 SP를 정말로 바꾸고 싶지 않다는 인상을받습니다. – codingbadger
OP는 또한 중간 테이블 변수와 INSERT INTO @T EXEC storedproc을 추가 한 다음 IN 절에 사용합니다. –
저장 프로 시저가 이러한 경우에 사용할 수없는 그것의 복잡성이다. 그러나, IN의 인수로서 올바른 테이블 값 함수를 사용할 가능성을 검토하십시오
+1 저장 프로 시저를 TVF로 다시 팩터링하면 나에게 가장 좋은 해결책이 들립니다. –
저장 프로 시저를 사용할 수 없습니다. 테이블을 반환하는 함수를 사용해야합니다. 예를 들어 :
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'))
O.o 방법에 대해 시도? – DHN
@ 배리 – solkim
@DHN을 포맷 해 주셔서 감사합니다. EXEC에서 "잘못된 구문 근처의 EXEC"와 함께 시작했습니다. – solkim