1

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

这是我的声明——

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,
4

2 回答 2

3

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

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

所以你必须先执行你的DROP TABLE语句,然后CREATE TABLE分别准备和执行语句。

于 2009-05-30T16:44:39.770 回答
0

你没有错过 concat 中两个字符串之间的逗号吗?

应该

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) )');
于 2009-05-30T09:13:17.517 回答