2012-01-06 11 views
0

私のストアドプロシージャでは、列名と値をテキストとして渡していますが、substring_indexを使用してそれらを部分文字列にしています。しかし、MySQLは私に構文エラーを表示します。更新ステートメントの変数に変数を代入できませんMySQL

どうすれば解決できますか?

set @var1 = @var2 

UPDATEの値のSET句ではありません。

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 @[email protected] 
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 '@[email protected] 
where dv_id=deviceId; 
-- prepare stmt1 from @s; 
-- execute stmt1 usi' at line 10 

答えて

1

構文エラーを示します。 MySQLは、あなたの変数を評価して、それらに含まれる式を得ることはありません。ただし、PREPAREEXECUTEを使用すると、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; 
関連する問題