2015-12-22 49 views
-1

我自己試圖將字符串變量傳遞給如下給出的stack overflow answer中給出的MySQL查詢中的條件。MySQL使用字符串變量的where條件選擇查詢

select @start := ' and Id=21'; 

select * from myTable where 1=1 @start; 

因此,如何能我用WHERE條件在MySQL查詢字符串變量。這些變量是動態設置的,查詢在程序中運行。

編輯:我也試過

SET @start = ' Id=21 '; 

select * from myTable where (select @start); 

但是沒有用。

+0

...將字符串值換成引號? –

+0

沒辦法..我也試過'SELECT'和'SET' – mpsbhat

回答

1

你不能那樣做。當您準備select聲明時,select子句中的列和條件需要爲固定

所以,你不能在你的子句中生成一個像posted那樣的動態子句。在那個例子中,列中的值是動態的而不是列名。

的手冊說:

有條件對象由一個或多個條件片段 ,將所有由指定的結合被接合。默認情況下, 連接是

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. 
*/ 
+0

只是因爲這個問題涉及到MySQL,所以你必須使用EXEC,而不是PREPARE和EXECUTE。 – ZygD