mysql - 过滤存储过程的结果集

标签 mysql stored-procedures

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

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'

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

旧存储过程: ... 选择 * 从 我的表格 在哪里 Col1 = @param1 和 Col2 = @param2

新存储过程:

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

但也许我没有完全理解您的存储过程。这里的临时表并不是真正最高效的解决方案,可能有点麻烦,但如果它适合你,那就继续吧,但我无法想象你不能只修改你的存储过程的情况使用子查询而不是临时表。

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

相关文章:

asp.net - 使用 SQL 数据源调用存储过程?

java - 在使用 Java 调用 Spring 存储过程时出现语法错误

c# - 将整数列表从 C# 传递到 Oracle 存储过程

sql - 调试发现错误 "Error converting data type varchar to real"

stored-procedures - SQL Server的存储过程的隔离级别?

php - 收集统计数据,例如网页的浏览量

mysql - 如何在一个数据类型中至少包含 1 个内容?

php - 自动填充动态生成的表单

php - Mysqli多行插入,简单的多插入查询

mysql - 连接到 docker 内的数据库失败