如何将存储过程转换为单个 SQL 语句
Posted
技术标签:
【中文标题】如何将存储过程转换为单个 SQL 语句【英文标题】:How can i transform a stored procedure into a single SQL statment 【发布时间】:2015-10-24 20:58:14 【问题描述】:我的数据库中有一个表,看起来像(表中可以有相同的元组):
+-------------+---------+--------+
| ProductName | Status | Branch |
+-------------+---------+--------+
| P1 | dead | 1 |
| P1 | dead | 2 |
| P1 | dead | 2 |
| P2 | expired | 1 |
+-------------+---------+--------+
我必须在 as 之后显示结果(Branch 属性是动态的):
+-------------+---------+--------+
| ProductName | Branch 1|Branch 2|
+-------------+---------+--------+
| P1 | dead | dead|
| P2 | expired | OK |
+-------------+---------+--------+
经过一些帮助,我想出了以下解决方案:
设置@sql = NULL; 选择 GROUP_CONCAT(DISTINCT 连接( 'COALESCE(GROUP_CONCAT(DISTINCT case when branch = ''', 分支, ''' 然后状态结束),''OK'') AS ', CONCAT('分支',分支) ) ) 进入@sql 从表1; SET @sql = CONCAT('SELECT productName, ', @sql, ' 从表 1 按产品名称分组'); 从@sql 准备stmt; 执行语句;它显示了我需要的确切结果:
+-------------+---------+-----------+
| productName | Branch1 | Branch2 |
+-------------+---------+-----------+
| p1 | dead | dead |
| p2 | expired | OK |
+-------------+---------+-----------+
SQL Fiddle.
我希望将此过程转换为单个 SQL 语句。我已经尝试过,但找不到解决方案。我怎样才能做到这一点?谢谢
【问题讨论】:
我们可以将call spName(...)
视为一条语句吗?
【参考方案1】:
这个确切的结果(因为它是由存储过程产生的,列数是在运行时确定的),不能在单个 SQL 选择语句中重现。这是不可能的。
【讨论】:
以上是关于如何将存储过程转换为单个 SQL 语句的主要内容,如果未能解决你的问题,请参考以下文章
将存储过程从 MS SQL Server 转换为 Informix