2015-12-22 5 views
-1

Самостоятельно пытается передать переменную строки туда, где условие в запросе MySQL задано в этом stack overflow answer, как показано ниже.MySQL select query с условием where с использованием строковых переменных

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

select * from myTable where 1=1 @start; 

Так как я могу использовать строковую переменную с условием в MySQL-запросах. Переменные задаются динамически и запрос выполняется внутри процедуры.

EDIT: Я также попытался

SET @start = ' Id=21 '; 

select * from myTable where (select @start); 

Но не использовать.

+0

... Оберните строковое значение в кавычки? –

+0

Ни в коем случае. Я также пробовал как «SELECT», так и «SET» – mpsbhat

ответ

1

No Вы не можете этого сделать. Столбцы и условие в предложении select должны быть исправлены, когда вы готовите заявление select.

Таким образом, вы не можете сделать динамический оператор предложения where, как тот, который вы posted. В этом примере значения в столбце являются динамическими, а не именами столбцов.

Руководство говорит:

Условный объект состоит из одного или нескольких условных фрагментов , что все будут соединенными указанным вместе. По умолчанию этот соединен с И.

1

Я считаю, что вы пытаетесь создать динамический запрос с помощью команды EXEC.

Вы можете создать переменную VARCHAR с утверждением SQL, а затем выполнить его с 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

Просто вы должны использовать не EXEC, а PREPARE и EXECUTE, потому что этот вопрос касается MySQL. – ZygD

Смежные вопросы