MYTABLE有ID栏。但是,以下查询会生成语法错误。
SELECT ID FROM MYTABLE
WHERE ID = EXEC MY_SP ID
你觉得这里有什么问题?
答案 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