2016-12-19 9 views
0

Ich muss den Alter-Befehl zu meinem Schema hinzufügen.Alter Schema funktioniert nicht

SET @s = (SELECT IF(
    (SELECT COUNT(*) 
     FROM INFORMATION_SCHEMA.COLUMNS 
     WHERE table_name = 'product' 
     AND table_schema = DATABASE() 
    AND column_name = 'date_madified' 
    ) > 0, 
    "SELECT 1;", 
    "ALTER TABLE `product` CHANGE `date_madified` `date_modified`;" 
)); 
PREPARE stmt FROM @s; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

Das obige wird ohne Angabe eines Fehlers ausgeführt. Aber der Spaltenname wird nicht geändert. Als ich versuchte, den Fehler zu überprüfen, den ich unten fand, sind die Ursachen. 1. Die richtige Datenbank wird nicht ausgewählt. 2. 'IF' nicht erhalten gibt korrekte Ergebnisse, obwohl ich den Datenbanknamen fest codiere.

Obwohl sql im obigen Format erfolgreich für alle anderen Fälle der Änderung des Namens, Datentyp und Größe usw. ausgeführt wird, aber in diesem Fall funktioniert es nicht richtig.

+0

Ich bin mir sicher, dass einige der Spalten verrückt geworden sein könnten, aber mysql ist glückselig unbewusst davon. Sie sollten wahrscheinlich nach "date_modified" statt – e4c5

+0

suchen. Tatsächlich gab es einen Schreibfehler für den Spaltennamen. Dieses ALTER-Schema soll den Fehler korrigieren. –

Antwort

0

Offensichtlich versuchen Sie Folgendes auf Testdaten NICHT in einer Produktionsumgebung.

Es scheint, dass Sie Ihre IF-Anweisung falsch herum haben, also nur select 1; ausführen, wenn Sie ein Feld finden, das Sie ändern möchten. Sie müssen die Reihenfolge der Klauseln in der IF-Anweisung ändern.

Auch die alte table-Anweisung erfordert eine Spaltendefinition, in Ihrem Fall so etwas wie

ALTER TABLE `product` CHANGE `date_madified` `date_modified` timestamp 

Ändern der oben den Feldtyp Ihres date_madified Feldes zu reflektieren.

+0

Ich kann nicht folgen, die einfachste Art zu schreiben ALTER TABLE 'Produkt' CHANGE' date_madified' 'date_modified' DATETIME NULL; Ich muss dem Weg folgen, wie es erwähnt wird. Außerdem arbeitet dieses Format in der Entwicklungsumgebung für alle anderen truncate sql. –

Verwandte Themen