2012-01-06 90 views
0

在我的存儲過程中,我將列名稱和值作爲文本傳遞,使用substring_index將它們子串,並且我試圖像下面的代碼中那樣分配它們。但MySQL提示我語法錯誤。無法將變量分配給更新語句中的變量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 @[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

您的問題是這樣的:

set @var1 = @var2 

不是一個UPDATE值的SET子句。 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;