我有一个存储过程来调用MySQL,它接收3个参数。其中任何一个都可以为null。现在,如果它们为null,我必须运行一个打开的查询(没有where语句),如果它们不是,我必须使用我收到的值来应用约束。我在这里给你我的代码;)
DELIMITER ;;
CREATE PROCEDURE `getPeople`(
IN p_startDate DATE,
IN p_endDate DATE,
IN p_name TEXT
)
BEGIN
SELECT * FROM people;
-- if p_startDate is not null, 'append' to the query "WHERE birthdate >= p_startDate"
-- if p_endDate is not null, 'append' to the query "WHERE birthdate <= p_endDate"
-- if p_name is not null, 'append' to the query "WHERE name = p_name"
END;;
DELIMITER ;
我的第一种方法是编写3个不同的查询,但我无法混合它们(例如:p_startDate和p_endDate不为null,我只想要执行1个查询)。你能对我说些什么吗?
非常感谢你。
答案 0 :(得分:0)
我相信准备好的语句将是在MySQL中实现此目的的方法(您可以使用动态SQL在SQL服务器中实现此目的)
看看这里:
SQL Syntax for Prepared Statements
您可以将没有where子句的main语句放入一个变量中,然后使用所需的逻辑将所需的where子句附加到该字符串上,然后从中准备并执行查询。
上面的页面提供了一些您应该能够适应以满足您需求的示例。