MYTABLE에 ID 열이 있습니다. 그러나 다음 쿼리는 구문 오류를 생성합니다.SP 호출을 포함하는 SQL Select 문에 구문 오류가 있습니다.
SELECT ID FROM MYTABLE
WHERE ID = EXEC MY_SP ID
여기서 잘못된 점이 무엇이라고 생각하십니까?
MYTABLE에 ID 열이 있습니다. 그러나 다음 쿼리는 구문 오류를 생성합니다.SP 호출을 포함하는 SQL Select 문에 구문 오류가 있습니다.
SELECT ID FROM MYTABLE
WHERE ID = EXEC MY_SP ID
여기서 잘못된 점이 무엇이라고 생각하십니까?
당신은 인라인과 같이 저장 프로 시저를 호출 할 수 없습니다에게 것으로 예상된다.
몇 가지 옵션이 포함됩니다. 1) 저장 프로 시저를 실행하고 결과를 임시 테이블에 저장합니다. 그런 다음 임시 테이블을 사용하십시오. 예 :
CREATE TABLE #Example
(
ID INTEGER
)
INSERT #Example
EXECUTE My_SP
SELECT t.ID FROM MyTable t JOIN #Example e ON t.ID = e.ID
DROP TABLE #Example
2) 예를 들어, 인라인 호출 할 수있는 사용자 정의 함수에 sproc에 변환
CREATE FUNCTION dbo.MyFunc()
RETURNS TABLE
AS
RETURN
(
SELECT ID FROM SomeTable WHERE ....
)
SELECT t.ID FROM MyTable t JOIN dbo.MyFunc() f ON t.ID = f.ID
3) SPROC는 하나의 ID를 반환하는 경우, 대신 SPROC에서 출력 매개 변수를 반환 고려하고 다음과 같이 사용합니다
DECLARE @ID INTEGER
EXECUTE MY_SP @ID OUTPUT
SELECT ID FROM MYTABLE
WHERE ID = @ID
내가 그냥 SP를 호출합니다 간부 문을 필요가 있다고 생각하지 않습니다, 간부는 별도의 문
그것은 –
난 당신이 모든 것을 할 수 있다고 생각하지 않습니다. 아마도 저장 프로 시저가 아닌 사용자 정의 함수 (User Defined Function)를 생각하고 계십니까? 컨텍스트에 따라 스칼라 UDF가 필요합니다.
이 시도 :
SELECT ID FROM MYTABLE WHERE ID = @@SPID
+1 그것에 나를 이길 도움이되지 않았다. –
정말 간단한 필요성이 그렇게 복잡한 해결책이 있습니까? –
@ user544433 - 예, 시도하는 것처럼 저장 프로 시저를 인라인으로 호출 할 수 없습니다. 어떤 솔루션을 선택 하느냐는 정확한 시나리오에 달려 있습니다. 예 : 현재 sproc이하는 일에 따라 사용자 정의 함수를 사용할 수 없을 수도 있습니다 (sproc에서 할 수있는 모든 기능을 수행 할 수는 없지만 함수를 인라인으로 호출 할 수는 있습니다) – AdaTheDev