我试图通过prepare语句创建一个表,但它给了我语法错误。好吧,如果我尝试单独执行相同的语句,那么它可以正常工作。
这是我的陈述 -
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,
答案 0 :(得分:3)
http://dev.mysql.com/doc/refman/5.1/en/prepare.html说:
[可伪造语句]的文本必须代表单个SQL语句,而不是多个语句。
因此,您必须先执行DROP TABLE
语句,然后单独准备并执行CREATE TABLE
语句。
答案 1 :(得分: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) )');