在Where子句中使用存储过程的结果

时间:2012-09-06 09:41:39

标签: sql sql-server sql-server-2008-r2

我在MS SQL 2008 R2中有一个存储过程(SP),我需要一个用户列表来缩小返回的数据。

我正在使用的系统有一个GetUsers SP,它返回一个用户列表,然后我需要用它来限制从我自己工作的SP返回的结果。

我看过TABLE变量,但不确定这是否是我需要的。

我如何将一个SP的结果整合到另一个SP的where子句中?

2 个答案:

答案 0 :(得分:8)

您可以通过

获取SP的结果
DECLARE @yourtablevariable TABLE (fields....)    

INSERT INTO @yourtablevariable
EXEC GetUsers

然后

SELECT *
FROM othertable
    INNER JOIN @yourtablevariable users on othertable.userid=users.userid

或者

SELECT *
FROM othertable
WHERE userid in (SELECT UserID FROM @yourtablevariable)

或者,如果可能,您可以将GetUsers转换为表值函数。

答案 1 :(得分:1)

在SQL Server中,如果SP返回TABLE,则使用表变量 (@ Table)内存表的最佳方式 (#Table)如果返回的数据量更大。