我知道这是一个糟糕的例子,但我正在努力简化事情,所以请耐心等待我编写这段代码。假设我将查询存储在数据库中,例如
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;
这是我目前所拥有的,但它不起作用。我正在尝试从数据库中选择一个查询,将一些变量传递给它,然后运行查询。
答案 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以获取演示行为的示例。