【发布时间】:2011-06-10 12:40:23
【问题描述】:
MYTABLE 有 ID 列。但是,以下查询会产生语法错误。
SELECT ID FROM MYTABLE
WHERE ID = EXEC MY_SP ID
你认为这里有什么问题?
【问题讨论】:
标签: sql sql-server sql-server-2005 stored-procedures return-value
MYTABLE 有 ID 列。但是,以下查询会产生语法错误。
SELECT ID FROM MYTABLE
WHERE ID = EXEC MY_SP ID
你认为这里有什么问题?
【问题讨论】:
标签: sql sql-server sql-server-2005 stored-procedures return-value
试试这个:
SELECT ID FROM MYTABLE WHERE ID = @@SPID
【讨论】:
我认为你根本做不到。您是否正在考虑用户定义函数而不是存储过程。根据上下文,您需要一个标量 UDF。
【讨论】:
你不能像这样内联调用存储过程。
几个选项包括: 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) 将存储过程转换为用户定义的函数,您可以调用该函数内联 例如
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
【讨论】:
我觉得你不需要exec语句,调用sp就行了,exec应该是单独的语句
【讨论】: