Mysql 如何将表名传递到函数中?

Mysql 如何将表名传递到函数中?,mysql,sql,Mysql,Sql,有没有办法让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\u name=“table

有没有办法让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\u name=“table\u name”)测试了它,但它不起作用

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; 

编辑:以上内容在SQL Server中工作。在MySQL中,我认为它看起来像是
MySQL>preparestmtfrom->'DELETE from'+@tablename+'其中id='+Convert(varchar,@the_id)MySQL>executestmt看起来非常像SQL Server:)Mitch,你的评论应该是你的答案。这个答案的总体思路是好的(执行一个准备好的语句),但没有一个代码可以远程在MySQL上工作。在MySQL实现的更多信息开始之前,需要终止语句,所以在每一行的末尾都应该有一个分号。然后,在MySQL中,您可以声明变量,比如
declare
,这样就可以切换变量名和类型。Varchar(max)在MySQL中毫无意义。@前缀是为会话变量保留的,您不能“声明”。嗯,这是第一条线不起作用的地方。下面的内容同样充满了不兼容的代码,但您可以理解。不过,你用事先准备好的陈述是个好主意。我找到了有用的答案。通过这个答案,我创建了一个SQL语句字符串并执行该字符串。可能是SQL注入的严重问题。