HAFTUNGSAUSSCHLUSS: Ich weiß, dass diese Frage schon hundert Mal gestellt wurde, aber ich wollte nur überprüfen, ob es keine einfachere Lösung gab, die ich möglicherweise verpasst hätte, bevor ich fortfuhr und viel Code dazu schrieb / beschaffte.
Unsere Software verwendet eine Datenbank, die ursprünglich für SQL Server 7 entwickelt wurde. Daher geben alle Skripts, die sie erstellen, keine explizite Sortierung für Zeichenspalten an. Wenn stattdessen eine Datenbank in SQL Server 2000 oder höher erstellt / wiederhergestellt wird, erbt jede Spalte die Datenbankkollatierung (was zufällig der Fall ist, SQL_Latin1_General_CP1_CI_AS
da dies der SQL Server 7-Standard war).
Theoretisch wäre dies nicht allzu wichtig, da unsere Datenbank, wenn sie auf dem Server eines Kunden von Grund auf neu erstellt wird, die Server-Sortierung des Kunden erbt (was normalerweise die Standardeinstellung für die moderne Installation ist Latin1_General_CP1_CI_AS
) und alles einfach funktioniert. Dieses Szenario bricht jedoch zusammen, wenn sie uns eine Datenbanksicherung senden oder wenn wir ihnen eine Datenbanksicherung senden, und entweder wir oder sie erhalten den gefürchteten Fehler bei der Nichtübereinstimmung der Kollatierung, wenn der Code versucht, auf temporäre Tabellen usw. zuzugreifen.
Wir haben versucht, Kunden zu schulen, ihre SQL Server-Instanzen zu installieren oder neu zu erstellen, um unsere bevorzugte Sortierung zu verwenden, aber das passiert natürlich nicht immer und ist nicht immer möglich.
Lösungen, bei denen eine neue Datenbank erstellt und die Daten kopiert werden, sind für uns nicht wirklich praktisch. Wir benötigen einen "Zauberstab", mit dem wir einer Live-Datenbank winken können, um alle vorhandenen Spalten zu korrigieren, ohne die Daten zu stören. Ich denke darüber nach, ein Dienstprogramm zu schreiben, um dies zu tun, aber hat jemand einfachere Vorschläge, da dies eine ziemlich große Aufgabe sein wird?