0

我知道这是一个不好的例子,但我正在尝试简化事情,所以请以迂回的方式编写这段代码。假设我将查询存储在数据库中,例如

查询表

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; 

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

4

1 回答 1

0

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

在大多数 DBMS 中,SQL 旨在不是动态的,试图颠覆这一点几乎肯定会导致性能下降和潜在的安全问题。

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 。

于 2013-03-18T21:17:32.453 回答