2013-06-04 152 views
6

我有一个返回单个结果集的存储过程。 我希望能够把它和过滤结果行,是这样的:过滤存储过程的结果集

SELECT * FROM (CALL sproc()) AS sp WHERE sp.someField = 0; 

有没有办法做到这一点?

回答

4

有几种方法可以解决这个问题。最简单的方法就是修改存储过程,让你直接过滤结果集,但我出于某种原因假设你无法做到这一点。

你需要做的什么是存储过程的结果存储在表/临时表所示:

DECLARE @tablevar table(col1,.. 
INSERT INTO @tablevar(col1,..) exec MyStoredProc 'param1', 'param2' 

SELECT col1, col2 FROM @tablevar WHERE col1 = 'abc' 

编辑:如果你可以编辑子查询:

老存储过程: ... 选择 * FROM 的MyTable WHERE Col1中= @参数1和 col2的= @ param2的

新的存储过程:

.... 
SELECT 
* 
FROM 
    (SELECT 
     * 
    FROM 
     MyTable 
    WHERE 
     Col1 = @param1 AND 
     Col2 = @param2 
    ) a 
WHERE 
    Col3 = FilterRule1 

但也许我不会在这里完全理解你的存储过程。这里的临时表并不是真正最高性能的解决方案,可能会有点麻烦,但如果它对您有用,然后去用它,但我无法想象的情况下,你不能只修改你的存储过程到使用子查询而不是临时表。

+1

我选择将结果集存储在SP中的临时表中,然后查询所述临时表。 – Ozzyberto

+0

我很高兴该解决方案为你工作。如果你能够更新存储过程,可能有更好的方法来重新设计你的存储过程而不必使用临时表,但这可能比它的价值更麻烦。 –