6
我有一个返回单个结果集的存储过程。 我希望能够把它和过滤结果行,是这样的:过滤存储过程的结果集
SELECT * FROM (CALL sproc()) AS sp WHERE sp.someField = 0;
有没有办法做到这一点?
我有一个返回单个结果集的存储过程。 我希望能够把它和过滤结果行,是这样的:过滤存储过程的结果集
SELECT * FROM (CALL sproc()) AS sp WHERE sp.someField = 0;
有没有办法做到这一点?
有几种方法可以解决这个问题。最简单的方法就是修改存储过程,让你直接过滤结果集,但我出于某种原因假设你无法做到这一点。
你需要做的什么是存储过程的结果存储在表/临时表所示:
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
但也许我不会在这里完全理解你的存储过程。这里的临时表并不是真正最高性能的解决方案,可能会有点麻烦,但如果它对您有用,然后去用它,但我无法想象的情况下,你不能只修改你的存储过程到使用子查询而不是临时表。
我选择将结果集存储在SP中的临时表中,然后查询所述临时表。 – Ozzyberto
我很高兴该解决方案为你工作。如果你能够更新存储过程,可能有更好的方法来重新设计你的存储过程而不必使用临时表,但这可能比它的价值更麻烦。 –