我自己尝试将字符串变量传递给MySQL查询中的where条件,如下面给出的stack overflow answer中所示。
select @start := ' and Id=21';
select * from myTable where 1=1 @start;
那么如何在MySQL查询中的where where条件中使用字符串变量。变量是动态设置的,查询在过程中运行。
编辑:我也试过
SET @start = ' Id=21 ';
select * from myTable where (select @start);
但没用。
答案 0 :(得分:1)
否你不能这样做。准备select
语句时,select子句中的列和条件需要固定。
所以你不能像你posted那样创建一个动态的where子句语句。在该示例中,列中的值是动态值而不是列名。
手册说:
条件对象由一个或多个条件片段组成 这将全部由指定的连接加入。默认情况下,那 连词是 AND 。
答案 1 :(得分:1)
我相信您尝试的是使用EXEC命令创建动态查询。
您可以使用SQL语句创建varchar变量,然后使用EXEC执行它,这里的示例来自
https://www.mssqltips.com/sqlservertip/1160/execute-dynamic-sql-commands-in-sql-server/
如果你想做类似
的事情DECLARE @city varchar(75)
SET @city = 'London'
SELECT * FROM customers WHERE City = @city
这是动态查询创建。
DECLARE @sqlCommand varchar(1000)
DECLARE @columnList varchar(75)
DECLARE @city varchar(75)
SET @columnList = 'CustomerID, ContactName, City'
SET @city = '''London'''
SET @sqlCommand = 'SELECT ' + @columnList + ' FROM customers WHERE City = ' + @city
EXEC (@sqlCommand) --This does the magic
/*
just a heads up, the user impersonating the execution needs credentials for EXEC command.
*/
答案 2 :(得分:0)
存储部分查询
SET @start = ' and Id=21';
将查询串联起来存储您的查询
SET @s = CONCAT('select * from myTable where 1=1 ', @start);
准备要执行的语句
PREPARE stmt FROM @s;
EXECUTE执行一条准备好的语句
EXECUTE stmt;
发布准备好的声明
DEALLOCATE PREPARE stmt;
一起:
SET @start = ' and Id=21';
SET @s = CONCAT('select * from myTable where 1=1 ', @start);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
有关MySQL手册的更多详细信息:https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html