2011-06-22 107 views
1

有沒有辦法讓MySQL函數接收表名或字段名?如何將表名轉換爲函數?

是這樣的:

CREATE PROCEDURE delete_row(the_id INT UNSIGNED , @table_name) 
BEGIN 
    IF ....... THEN 
    BEGIN 
     DELETE FROM @table_name WHERE id = the_id ; 
     ............. 
    END 
END 

我用繩子(SET @ TABLE_NAME = 「表格名」)測試,但它不工作。

+0

我發現有用的答案[這裏](http://stackoverflow.com/questions/2977356 /在MySQL的知識對傳遞一個表名-AS-存儲過程和 - 或 - 功能 - 參數)。通過這個答案,我創建了一串SQL語句並執行字符串。可能是SQL注入的嚴重問題。 –

回答

-1
declare varchar(max) @mySQL 
set @mySQL = 'DELETE FROM ' + @tablename + 'WHERE id = ' + Convert(varchar, @the_id) 
sp_executeSQL @mySQL 

,並就MySQL的這項工作(作爲評論者指出的),它應該是這樣的:

mysql> prepare stmt from -> 'DELETE FROM ' + @tablename + 'WHERE id = ' + Convert(varchar, @the_id) 
mysql> execute stmt; 
+0

編輯:上面的作品在SQL Server中。在MySQL中,我認爲它看起來像'mysql>準備stmt從 - >'DELETE FROM'+ @tablename +'WHERE id ='+轉換(varchar,@the_id)mysql>執行stmt;' – therealmitchconnors

+0

看起來非常像SQL Server: )米奇,你的評論應該是你的答案。 –

+0

這個答案的一般想法是好的(執行預準備語句),但是沒有任何代碼甚至可以遠程使用MySQL。 –