Mysql Prepare Ошибка оператора при выполнении - PullRequest
1 голос
/ 30 мая 2009

Я пытаюсь создать таблицу, хотя подготовить оператор, но он дает мне синтаксическую ошибку. Хорошо, если я попытаюсь выполнить одно и то же утверждение по отдельности, тогда оно будет работать нормально.

Вот мое утверждение -

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,

Ответы [ 2 ]

3 голосов
/ 30 мая 2009

http://dev.mysql.com/doc/refman/5.1/en/prepare.html говорит:

Текст [готового оператора] должен представлять один оператор SQL, а не несколько операторов.

Итак, сначала вам нужно будет выполнить оператор DROP TABLE, а затем отдельно подготовить и выполнить оператор CREATE TABLE.

0 голосов
/ 30 мая 2009

вы не пропустили запятую между двумя строками в 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) )');
...