Невозможно назначить переменную переменной в операторе обновления MySQL - PullRequest
0 голосов
/ 06 января 2012

В моей хранимой процедуре я передаю имена столбцов и значения в виде текста, подставляя их с помощью substring_index, и я пытаюсь назначить их, как показано в коде нижеНо MySQL подсказывает мне синтаксическую ошибку.

Как я могу решить эту проблему?

var1, var2 varchar(50);
set @var1 = substring_index(substring_index(substring_index(query,',',1),',',1),'=',1);
set @var2 = substring_index(substring_index(substring_index(query,',',1),',',1),'=',-1);

дает здесь синтаксическую ошибку

update device
set @var1=@var2 
where dv_id=deviceId;

Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL  server version for the right syntax to use near '@var1=@var2
where dv_id=deviceId;
-- prepare stmt1 from @s;
-- execute stmt1 usi' at line 10

1 Ответ

1 голос
/ 06 января 2012

Ваша проблема в том, что это:

set @var1 = @var2

не является предложением SET для значения UPDATE. MySQL не будет оценивать ваши переменные, чтобы получить выражения, которые они содержат. Однако вы можете использовать PREPARE и EXECUTE для динамического построения и выполнения SQL. Примерно так:

set @var1   = substring_index(substring_index(substring_index(query,',',1),',',1),'=',1);
set @var2   = substring_index(substring_index(substring_index(query,',',1),',',1),'=',-1);
set @update = concat('update device set ', @var1, ' = ', @var2, ' where dv_id = deviceId');
prepare stmt from @update;
execute stmt;
deallocate prepare stmt;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...