Mysql 执行时Prepare Statement 错误

问题描述 投票:0回答:2

我试图通过准备语句创建一个表,但它给了我语法错误。好吧,如果我尝试单独执行相同的语句,那么它就可以正常工作。

这是我的声明 -

SET @Stmt1 = Concat('DROP TABLE IF EXISTS ',DB,'.`county`;\n'
'CREATE TABLE IF NOT EXISTS ',DB,'.`County`
(
  `CountyID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `CountyName` VARCHAR(45) NOT NULL,
  `CountyCode` VARCHAR(30) NOT NULL,
   PRIMARY KEY (`CountyID`)
)');

Prepare stmt2 From @stmt1;
Execute stmt2;

请问谁能告诉我这份声明中遗漏了什么? 它在这一行给我一个错误:

'CREATE TABLE IF NOT EXISTS ',DB,'.`County`
(
  `CountyID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
mysql prepared-statement concatenation
2个回答
3
投票

http://dev.mysql.com/doc/refman//en/prepare.html 说:

[可准备语句]的文本必须代表单个 SQL 语句,而不是多个语句。

因此,您必须先执行

DROP TABLE
语句,然后单独准备并执行
CREATE TABLE
语句。


0
投票

你在连接中的两个字符串之间没有漏掉一个逗号吗?

应该是

SET @Stmt1 = Concat('DROP TABLE IF EXISTS ',DB,'.county;\n', 'CREATE TABLE IF NOT EXISTS ',DB,'.County ( CountyID INT UNSIGNED NOT NULL AUTO_INCREMENT, CountyName VARCHAR(45) NOT NULL, CountyCode VARCHAR(30) NOT NULL, PRIMARY KEY (CountyID) )');
© www.soinside.com 2019 - 2024. All rights reserved.