我有一个条件,我应该在哪里获取存储在其他表中的条件,例如id > 10
或amount < 100
。
我正在使用存储过程来执行一些任务,在该任务中,我将检索where条件并将其插入表中。但这可能不起作用,可能是因为在开头和结尾都附加了撇号。
set @whereC = (select FilterCondition from SearchLeads where `SearchLeadID` = sid);
INSERT INTO `JTemporary`
(`ZipID`,`FirstName`,`LastName`,`MemberSince`,
`Address1`,`Phone`,`Email`,`CompanyName`,
`BusPhone`,`Deleted`,`CreatedBy`,`CreateDate`,
`UpdatedBy`,`UpdateDate`)
select `ZipCode`,`FirstName`,`LastName`,`AddDate`,
`AddressLine1`,`HomePhone`,`HomeEmail`,`Employer`,
`BusinessPhone`,'N',loginUserID,now(),
loginUserID,now()
from membertrans where @whereC;
这不起作用。当我直接通过复制该条件并替换变量来应用它时,它可以工作,但对变量不起作用。
如何实现?
答案 0 :(得分:1)
这是一个适用于我的mysql数据库的示例。
CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(whereClause varchar(512))
BEGIN
SET @str = concat('SELECT * from mytable where ',whereClause);
PREPARE myquery FROM @str;
EXECUTE myquery;
END
我可以在任何我喜欢的where子句中调用上述内容,例如
call test ('col1 between 5 and 10 and col2=''a bit of text''')
这里的关键显然是SET / PREPARE / EXECUTE,这是您需要做的。
由于我自己的所有示例都在SQL Server中进行,因此我使用了问题Is it possible to execute a string in MySQL?来得出上面的一些内容。
答案 1 :(得分:0)
您没有将任何列放在条件与选择查询列 FilterCondition 相匹配的位置。 例如
set @whereC = (select FilterCondition from SearchLeads where `SearchLeadID` = sid);
INSERT INTO `JTemporary`
(`ZipID`,`FirstName`,`LastName`,`MemberSince`,
`Address1`,`Phone`,`Email`,`CompanyName`,
`BusPhone`,`Deleted`,`CreatedBy`,`CreateDate`,
`UpdatedBy`,`UpdateDate`)
select `ZipCode`,`FirstName`,`LastName`,`AddDate`,
`AddressLine1`,`HomePhone`,`HomeEmail`,`Employer`,
`BusinessPhone`,'N',loginUserID,now(),
loginUserID,now()
from membertrans where **filterColumn ** IN (or any other clause) @whereC;
我认为这是问题所在,尝试此方法可能会对您有所帮助。