mysql错误使用变量作为表名
Posted
技术标签:
【中文标题】mysql错误使用变量作为表名【英文标题】:mysql error using variable as table name 【发布时间】:2013-03-28 15:07:58 【问题描述】:为什么会出现这个错误?
CREATE DEFINER=`root`@`localhost` PROCEDURE `selectrecords`(tablename varchar(50))
begin
set @table_name=tablename;
set @sql_text=concat('Select * from @table_name');
prepare statement from @sql_text;
execute statement;
deallocate prepare statement;
end
错误:
....to use near '@table_name' at line 1
我的代码是正确的,但我不明白为什么......
【问题讨论】:
我不认为你可以在动态 sql 中使用变量作为表名。在甲骨文你肯定不能。我认为您必须连接,请参阅 JW 的回答 @Sebas:如果我使用 "delete frrom....where" 怎么办,JW 的回答还是可以接受的? 是的,我认为他几乎回答了你所有的问题。 我收到错误:“set @sql_text = concat('Delete from ', tablename, 'WHERE id = pid');” “pid int”--> 包含在参数中..任何帮助? 在WHERE前加一个空格 【参考方案1】:我想你的意思是,
CREATE PROCEDURE `selectrecords`(tablename varchar(50))
begin
set @sql_text = concat('Select * from ', tablename);
prepare statement from @sql_text;
execute statement;
deallocate prepare statement;
end
即使在 dynamic sql 中,您也不能参数化表名和列名,因此您唯一的选择是与字符串连接。只有值可以放在占位符中。
mysql PREPARE syntax更新 1
CREATE PROCEDURE `selectrecords`(tablename varchar(50))
begin
set @val = idnumber;
set @sql_text = concat('Select * from ', tablename, ' WHERE id = ?');
prepare statement from @sql_text;
execute statement USING @val;
deallocate prepare statement;
end
【讨论】:
如果我想在参数中包含 id 怎么办?假设我想像这样查询“从 id =idnumber 的表名中删除”?SET @sql = 'Delete from tablename where id = ?'
您可以将idnumber
的值放在占位符中。
我的意思是我仍在使用上面的代码,但这次使用 where 子句。如何连接,包括在哪里?
谢谢!你真是个极客:)
还有一件事,我想在我的参数中包含'id int'并删除我的数据库中的一条记录,对吗? "SET @sql=concat('Delete from', tablename,' where id=pid');以上是关于mysql错误使用变量作为表名的主要内容,如果未能解决你的问题,请参考以下文章
由于在 MySQL 中使用保留字作为表名或列名导致的语法错误
由于在 MySQL 中使用保留字作为表名或列名导致的语法错误
mysql存储过程 将传入的参数用作为表名 执行时提示错误 Table 'asteriskcdrdb.tbname' doesn't exist