我自己试图将字符串变量传递到MySQL查询中的where条件,如下所示,在这个stack overflow answer中给出了这个条件。
select @start := ' and Id=21';
select * from myTable where 1=1 @start;因此,如何在MySQL查询中使用具有where条件的字符串变量。变量是动态设置的,查询在过程中运行。
编辑:我也尝试过
SET @start = ' Id=21 ';
select * from myTable where (select @start);但没用。
发布于 2015-12-22 05:13:32
,不,,你不能那样做。在准备select语句时,select子句中的列和条件需要是固定的。
因此,您不能像您posted那样创建一个动态where子句语句。在该示例中,列中的值是动态的,而不是列名。
手册上说:
条件对象由一个或多个条件片段组成,这些片段都将由指定的连接连接。默认情况下,该连接是和。
发布于 2016-05-11 13:57:11
我相信您尝试的是使用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.
*/发布于 2019-07-11 18:12:35
存储查询的一部分
SET @start = ' and Id=21';存储连接其部件的查询
SET @s = CONCAT('select * from myTable where 1=1 ', @start);准备执行语句
PREPARE stmt FROM @s;执行已准备好的语句
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
https://stackoverflow.com/questions/34408754
复制相似问题