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

时间:2011-01-17 15:19:35

标签: sql sql-server sql-server-2005 stored-procedures return-value

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

SELECT ID FROM MYTABLE
WHERE ID = EXEC MY_SP ID

你觉得这里有什么问题?

4 个答案:

答案 0 :(得分:5)

您无法像这样内联调用存储过程。

有两个选项包括: 1)执行存储过程并将结果存储在临时表中。然后使用该临时表。 e.g。

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转换为可以内联调用的用户定义函数 e.g。

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中返回OUTPUT参数,并使用如下:

DECLARE @ID INTEGER
EXECUTE MY_SP @ID OUTPUT

SELECT ID FROM MYTABLE
WHERE ID = @ID

答案 1 :(得分:1)

我认为你不需要exec语句,只需调用sp,exec应该是一个单独的语句

答案 2 :(得分:0)

我认为你根本不能这样做。您是在考虑用户定义的函数而不是存储过程。根据上下文,您需要一个标量UDF。

答案 3 :(得分:0)

试试这个:

SELECT ID FROM MYTABLE WHERE ID = @@SPID