我有一个存储过程返回一个结果集。
我希望能够调用它并过滤结果行,例如:

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'

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

旧存储过程:
...
选择
*

我的 table
在哪里
col1 = @ param1 AND
Col2 = @ param2

新存储过程:
....
SELECT
*
FROM
   (SELECT
      *
   FROM
      MyTable
   WHERE
      Col1 = @param1 AND
      Col2 = @param2
   ) a
WHERE
   Col3 = FilterRule1

但也许我不完全了解您在此处存储的proc。这里的临时表并不是真正性能最高的解决方案,可能有点麻烦,但是如果它对您有用,那么就去解决它,但是我在设想无法仅将存储的proc修改为使用子查询而不是临时表。

关于mysql - 筛选存储过程结果集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16923358/

10-16 21:02