我试图通过准备语句创建一个表,但它给了我语法错误。好吧,如果我尝试单独执行相同的语句,那么它就可以正常工作。
这是我的声明 -
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,
http://dev.mysql.com/doc/refman//en/prepare.html 说:
[可准备语句]的文本必须代表单个 SQL 语句,而不是多个语句。
因此,您必须先执行
DROP TABLE
语句,然后单独准备并执行 CREATE TABLE
语句。
你在连接中的两个字符串之间没有漏掉一个逗号吗?
应该是
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) )');