我有一个返回单个结果集的存储过程。 我希望能够调用它并过滤生成的行,如:
SELECT * FROM (CALL sproc()) AS sp WHERE sp.someField = 0;
有办法做到这一点吗?
答案 0 :(得分:4)
有几种方法可以解决这个问题。最简单的是修改存储过程以允许您直接过滤结果集,但我假设由于某种原因您无法执行此操作。
您需要做的是将存储过程的结果存储在表/临时表中,如下所示:
DECLARE @tablevar table(col1,..
INSERT INTO @tablevar(col1,..) exec MyStoredProc 'param1', 'param2'
SELECT col1, col2 FROM @tablevar WHERE col1 = 'abc'
编辑:如果您可以编辑子查询:
旧存储过程: ... 选择 * 从 MyTable的 哪里 Col1 = @ param1 AND Col2 = @ param2
新存储过程:
....
SELECT
*
FROM
(SELECT
*
FROM
MyTable
WHERE
Col1 = @param1 AND
Col2 = @param2
) a
WHERE
Col3 = FilterRule1
但也许我不完全理解你的存储过程。这里的临时表并不是最高性能的解决方案,可能有点麻烦,但是如果它适合你,那么请继续使用它,但是我无法想象你不能只修改你的存储过程到使用子查询而不是临时表。