SQL Select语句包括SP Call有语法错误

Ahm*_*tun 2 sql sql-server stored-procedures sql-server-2005 return-value

MYTABLE有ID栏.但是,以下查询会生成语法错误.

SELECT ID FROM MYTABLE
WHERE ID = EXEC MY_SP ID
Run Code Online (Sandbox Code Playgroud)

你认为这里有什么问题?

Ada*_*Dev 5

您不能像这样内联调用存储过程.

一些选项包括: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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

3)如果sproc返回单个ID,请考虑从sproc返回OUTPUT参数,并使用如下:

DECLARE @ID INTEGER
EXECUTE MY_SP @ID OUTPUT

SELECT ID FROM MYTABLE
WHERE ID = @ID
Run Code Online (Sandbox Code Playgroud)