我有要求,我将在哪里获取存储在其他表中的条件,可以是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;
这是行不通的。当我通过复制该条件并代替变量直接应用时,它可以工作,但不适用于变量。
如何实现这一点?
这是一个适用于我的 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''')
这里的关键显然是设置/准备/执行,这是你需要做的。
我用这个问题是否可以在MySQL中执行字符串?来推导出上面的一些内容,因为我自己的所有示例都在SQL Server中。
您尚未将任何列放在与选择查询列FilterCondition匹配的 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 **filterColumn ** IN (or any other clause) @whereC;
我认为这就是问题所在,试试这个可能会对您有所帮助。