2009-05-30 9 views
1

J'essaie de créer une table en préparant une instruction mais elle me donne une erreur de syntaxe. Eh bien, si j'essaie d'exécuter la même déclaration individuellement, cela fonctionne très bien.Mysql Préparez une erreur de déclaration en cours d'exécution

Voici ma déclaration -

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; 

S'il vous plaît quelqu'un peut me dire ce que je manque dans cette déclaration? Il me donne une erreur sur cette ligne:

'CREATE TABLE IF NOT EXISTS ',DB,'.`County` 
(
    `CountyID` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
+0

Pouvez-vous nous montrer l'erreur réelle que vous obtenez? –

Répondre

3

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

Le texte [de la déclaration préparable] doit représenter une seule instruction SQL, pas plusieurs déclarations.

Vous devrez exécuter votre première déclaration DROP TABLE, puis préparer et exécuter l'instruction CREATE TABLE séparément.

0

N'êtes-vous pas manque une virgule entre les deux chaînes dans le concat?

devrait être

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))'); 
+0

Salut! Il me donne toujours la même erreur. –

+0

Y a-t-il une raison particulière pour laquelle vous insérez un \ n? –

+0

non c'est juste que je les voulais sur la nouvelle ligne –