SQL Server 2008R2-Konvertierungssortierung

7

Ich habe eine vorhandene Datenbank, die die Arabic_CI_ASSortierung verwendet, muss sie jedoch in SQL_Latin1_General_CP1_CI_ASdie Standardkollatierung für den Server konvertieren. Das Problem besteht jedoch darin, dass ich den folgenden Befehl verwende:

USE master;
GO

ALTER DATABASE MyDB
COLLATE SQL_Latin1_General_CP1_CI_AS ;
GO

Es gibt mir die folgende Fehlermeldung:

Meldung 5075, Ebene 16,
Status 1, Zeile 1 Das Objekt 'GetAllSuppliersInCompliance' ist abhängig von der Datenbanksortierung. Die Datenbanksortierung kann nicht geändert werden, wenn ein schemagebundenes Objekt davon abhängt. Entfernen Sie die Abhängigkeiten von der Datenbanksortierung und wiederholen Sie den Vorgang.

Meldung 5075, Ebene 16,
Status 1, Zeile 1 Das Objekt 'GetTier1SupplierComplianceStatus' ist abhängig von der Datenbanksortierung. Die Datenbanksortierung kann nicht geändert werden, wenn ein schemagebundenes Objekt davon abhängt. Entfernen Sie die Abhängigkeiten von der Datenbanksortierung und wiederholen Sie den Vorgang. ..... .....

Meldung 5072, Ebene 16, Status 1, Zeile 1
ALTER DATABASE fehlgeschlagen. Die Standardkollatierung der Datenbank 'MyDB' kann nicht auf SQL_Latin1_General_CP1_CI_AS festgelegt werden.

Daher habe ich Folgendes versucht, um die temporären Einschränkungen mit dem folgenden Befehl zu deaktivieren:

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

Ich habe dann den ersten Befehl ausgeführt, jedoch ist der gleiche Fehler aufgetreten.

Ahmad Abuhasna
quelle

Antworten:

6

Angenommen, diese Objekte sind gespeicherte Prozeduren oder Ansichten (und keine Tabellen), müssen Sie:

  1. Skript die fraglichen Objekte
  2. Löschen Sie sie aus der Datenbank (oder entfernen Sie einfach die Schema-Bindung)
  3. Ändern Sie die Datenbanksortierung
  4. Erstellen Sie die Objekte neu, indem Sie die Skripte ausführen, die Sie im ersten Schritt erstellt haben.

Nebenbei mussten Sie nicht sp_msforeachtable "ALTER TABLE..."

Max Vernon
quelle
Vielen Dank, aber einige der Objekte waren Tabellen, daher musste ich Folgendes umgehen: 1) Abrufen der Quelldatenbankstruktur über den Skriptgenerator, 2) Erstellen einer leeren Datenbank mit der richtigen Sortierung, 3) Ausführen der Skripte auf dem leere Datenbank, 4) Migrieren Sie die Daten von der Quelle zum Ziel.
Ahmad Abuhasna
1
@AhmadAbuhasna, ich denke, die Fehler, die Sie erhalten, sind auf schemabundene Objekte wie Funktionen, gespeicherte Prozeduren und Ansichten zurückzuführen. Ich würde der Empfehlung von @Max Vernon folgen, mit der Ausnahme, dass ich anstelle des Löschens von Objekten nur entfernen WITH SCHEMABINDING, die Sortieränderung für die Datenbank durchführen und dann erneut anwenden würde WITH SCHEMABINDING. Dies, um zu vermeiden, dass Berechtigungen, erweiterte Eigenschaften usw. verloren gehen, die Sie beim Erstellen von Skripten für das Objekt möglicherweise versehentlich übersehen. Ich bin mir auch nicht sicher, ob das Ändern der Sortierung der Datenbank automatisch die Sortierung jeder Tabelle ändert.
Daniel Hutmacher
Hallo Daniel: Tatsächlich habe ich mich zurückgezogen, um Max-Schritte auszuführen, und es hat funktioniert, aber ich musste eine Zeile aus den Prozeduren entfernen, die das Problem mit der Datenbankkonvertierung verursacht haben. aber wenn ich die schemabinding entferne, hat es gut funktioniert. danke
Ahmad Abuhasna