2013-01-21 34 views
0

在一個MySQL腳本,我願做這樣的事情:如何使用動態用戶名創建用戶?

SET @username = CONCAT(DATABASE(), "[email protected]`%`"); 
CREATE USER @username; 

,但我不能化解在CREATE USER行的語法錯誤。

有沒有辦法轉義內聯變量,以便CREATE USER可以有一個動態創建的用戶?

+0

你不能在'CREATE USER'語句中使用參數AFAIK。 –

+0

也準備好語句不是一個選項。 – fancyPants

+0

@tombom:爲什麼不呢?從MySQL v5.1開始,可以使用'CREATE USER' [在準備好的語句中](http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-prepared-statements.html)。 – eggyal

回答

1

你可以用prepared statements做到這一點:

set @sql=concat("create user '", database(), "-haha", "'@'%' identified by 'whatever';"); 
prepare stmt from @sql; 
execute stmt; 
deallocate prepare stmt; 

select @sql; 

select * from mysql.user where user = 'playground-haha'; 
+0

謝謝@tombom。這在Workbench SQL Editor中很好用,但是我在執行代碼的數據庫創建腳本時遇到了麻煩。我加載我的db創建腳本文本(其中包括幾個CREATE TABLE語句),並從ADO.net中的命令執行腳本文本。但是添加「set @ sql = concat(」blah「,」blah「)」行會導致腳本失敗。我想我需要轉義「set @sql ...」一個更高的級別? – Daniel

+0

終於搞定了。需要在連接字符串上設置'允許用戶變量'爲true。從另一個SO線程學習。對我來說非常不明顯。 – Daniel