2011-06-22 10 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は= "TABLE_NAME")でそれをテストしたが、それはない作品を行います。

+0

私が参考に答えを見つけ、[ここ](http://stackoverflow.com/questions/2977356/in-mysql-how-to-pass-a-table-name-as-procedure-and-or-function-argument)を参照してください。この答えによって、私は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で私はそれが非常にSQL Serverのように見える ' – therealmitchconnors

+0

を実行する:> 'DELETE FROM' + @tablename + 'WHERE id =' + Convert(varchar、@the_id)mysql>実行stmt; )ミッチ、あなたのコメントはあなたの答えでなければなりません。 –

+0

この回答の一般的な考え方は良い(準備済みの文を実行する)が、リモートでMySQLで動作するコードはありません。 –

関連する問題