如何在存储在数据库中的查询上运行CONCAT

时间:2013-03-18 16:13:00

标签: mysql concat

我知道这是一个糟糕的例子,但我正在努力简化事情,所以请耐心等待我编写这段代码。假设我将查询存储在数据库中,例如

查询表

id    query
1     concat('SELECT * FROM table1 WHERE year = ', _year, 'order by name')
2     concat('SELECT * FROM table2 WHERE year = ', _year, 'order by name')

我想运行以下例程

DECLARE _year;
SET _year= "2013";
SET @SQL = (SELECT query FROM queries WHERE id = 1);    
PREPARE stmt FROM @SQL;
EXECUTE stmt; 

这是我目前所拥有的,但它不起作用。我正在尝试从数据库中选择一个查询,将一些变量传递给它,然后运行查询。

1 个答案:

答案 0 :(得分:0)

如果可以提前确定您的查询(特定参数除外),则可以考虑使用具有判别式的UNION查询。然后,使用查询表在联合中选择特定查询并将参数应用于它们。查询本身在数据库的视图中定义。

SQL在大多数DBMS中都不是动态的,破坏它的尝试几乎肯定会导致性能降低和潜在的安全问题。

CREATE VIEW UnionView
AS SELECT *, 1 as Type, Value1 AS Param FROM Table1 
UNION ALL SELECT *, 2 as Type, Value2 AS Param FROM Table1
UNION ALL SELECT *, 3 as Type, Value3 AS Param FROM Table1;

SELECT * FROM UnionView WHERE Type = 2 AND Param = 2;

请参阅SqlFiddle以获取演示行为的示例。