2009-05-05 12 views
0

Geschichte: Ich hatte eine Bereitstellung der anderen Nacht, die Ausführung eines Skripts, das eine gespeicherte Prozedur erstellt beteiligt. Beim Ausführen des Skripts ist jedoch ein Fehler bei der Sortierung der Datenbank aufgetreten. Das Problem: Das Problem: Mit der Hilfe von unserem Freund Google, habe ich herausgefunden, dass das Problem, das ich hatte, war auf unserer Live-Umgebung db hat eine Kollation und die temporäre DB Kollation ist anders, und ich bekam ein Fehler beim Versuch, in eine Variablentabelle einzufügen.SQL-Kollation Probleme bei der Bereitstellung von Live

Die Frage: Was ist der beste Weg nach vorne, oder meine Optionen?

Umwelt: SQL 2000

Vielen Dank im Voraus.

Antwort

0

Wir haben diesen mit temporären Datenbanken, die wir für Integrationstests verwenden, in Bezug auf Entwicklungs- und Produktionsdatenbanken auf den Prüfstand gestellt. Was wir getan haben, ist sicherzustellen, dass alle Datenbanken dieselbe Kollatierung verwenden. In Ihrem Fall sollten Sie wahrscheinlich eine einfache Suche/Ersetzung in der Skriptdatei durchführen und einfach die Kollatierung auf die in der Zieldatenbank verwendete ändern.

Bearbeiten: Ändern im Skript wird Sie jetzt weiterleiten; Auf längere Sicht sollten Sie sicherstellen, dass in allen verwandten Datenbanken dieselbe Kollatierung verwendet wird.

-1

Die offensichtliche Lösung besteht darin, Ihre Entwicklungsdatenbank mit derselben Sortierung wie die Produktionsdatenbank neu zu installieren.

Wenn Sie das nicht können, beispielsweise wenn Sie mehrere Produktionsdatenbanken mit unterschiedlichen Kollatierungen haben, können Sie sicherstellen, dass Ihre Aktualisierungen entweder fehlschlagen oder als Ganzes erfolgreich sind. Fügen Sie eine Transaktion für alle Aktualisierungen der gespeicherten Prozedur ein und stellen Sie sicher, dass Sie alter, nicht drop/create verwenden.

0

Es gibt einige Lösungen

  • Stellen Sie sicher, alle Ihre collate sind in der gleichen db entsprechen. Sonst wirst du Schmerzen haben.
  • Wenn Ihre temporären Tabellen nicht viele Daten enthalten, müssen Sie sie mit derselben Sortierung wie die Zieltabellen neu erstellen.
  • Wenn das keine Option ist, suchen Sie nach String-Typen, und zwingen Sie Ihre collate zum Ziel db ein

    INSERT INTO dest_db..DEST_TABLE (DEST_VARCHAR_COLUMN) 
    SELECT TMP_VARCHAR_COLUMN COLLATE <dest_db_collate> 
    FROM tmp_db..#TEMP_TABLE 
    
+0

Sie haben recht, wir wollen nicht den gleichen Schmerz! Danke für die Hilfe –

Verwandte Themen