Der Kollatierungskonflikt zwischen "SQL_Latin1_General_CP1_CI_AS" und "Latin1_General_CI_AS" kann nicht in der gleichen Operation gelöst werden

341

Ich habe den folgenden Code

SELECT tA.FieldName As [Field Name],
       COALESCE(tO_A.[desc], tO_B.[desc], tO_C.Name, tA.OldVAlue) AS [Old Value],
       COALESCE(tN_A.[desc], tN_B.[desc], tN_C.Name, tA.NewValue) AS [New Value],
       U.UserName AS [User Name],
       CONVERT(varchar, tA.ChangeDate) AS [Change Date] 
  FROM D tA
       JOIN 
       [DRTS].[dbo].[User] U 
         ON tA.UserID = U.UserID
       LEFT JOIN 
       A tO_A 
         on tA.FieldName = 'AID' 
        AND tA.oldValue = CONVERT(VARCHAR, tO_A.ID)
       LEFT JOIN 
       A tN_A 
         on tA.FieldName = 'AID' 
        AND tA.newValue = CONVERT(VARCHAR, tN_A.ID)
       LEFT JOIN 
       B tO_B 
         on tA.FieldName = 'BID' 
        AND tA.oldValue = CONVERT(VARCHAR, tO_B.ID)
       LEFT JOIN 
       B tN_B 
         on tA.FieldName = 'BID' 
        AND tA.newValue = CONVERT(VARCHAR, tN_B.ID)
       LEFT JOIN 
       C tO_C 
         on tA.FieldName = 'CID' 
        AND tA.oldValue = tO_C.Name
       LEFT JOIN 
       C tN_C 
         on tA.FieldName = 'CID' 
        AND tA.newValue = tN_C.Name
 WHERE U.Fullname = @SearchTerm
ORDER BY tA.ChangeDate

Beim Ausführen des Codes wird der Fehler nach dem Hinzufügen der beiden Verknüpfungen für Tabelle C in den Titel eingefügt. Ich denke, dies hat möglicherweise damit zu tun, dass ich SQL Server 2008 verwende und eine Kopie dieser Datenbank wiederhergestellt habe meine Maschine, die 2005 ist.

jhowe
quelle

Antworten:

306

Sie haben eine Nichtübereinstimmung von zwei verschiedenen Kollatierungen in Ihrer Tabelle. Mit dieser Abfrage können Sie überprüfen, welche Kollatierungen jede Spalte in Ihren Tabellen enthält:

SELECT
    col.name, col.collation_name
FROM 
    sys.columns col
WHERE
    object_id = OBJECT_ID('YourTableName')

Kollatierungen werden benötigt und beim Bestellen und Vergleichen von Zeichenfolgen verwendet. Im Allgemeinen ist es eine gute Idee, eine einzige, eindeutige Sortierung in Ihrer Datenbank zu verwenden. Verwenden Sie keine unterschiedlichen Sortierungen in einer einzelnen Tabelle oder Datenbank. Sie fragen nur nach Problemen.

Sobald Sie sich für eine einzelne Sortierung entschieden haben, können Sie die Tabellen / Spalten, die noch nicht übereinstimmen, mit diesem Befehl ändern:

ALTER TABLE YourTableName
  ALTER COLUMN OffendingColumn
    VARCHAR(100) COLLATE Latin1_General_CI_AS NOT NULL

Marc

UPDATE: Um die Volltextindizes in Ihrer Datenbank zu finden, verwenden Sie diese Abfrage hier:

SELECT
    fti.object_Id,
    OBJECT_NAME(fti.object_id) 'Fulltext index',
    fti.is_enabled,
    i.name 'Index name',
    OBJECT_NAME(i.object_id) 'Table name'
FROM 
    sys.fulltext_indexes fti
INNER JOIN 
    sys.indexes i ON fti.unique_index_id = i.index_id

Sie können den Volltextindex dann löschen, indem Sie:

DROP FULLTEXT INDEX ON (tablename)
marc_s
quelle
Danke Marc, das ist genau das, wonach ich gesucht habe. Eine der Tabellen war aus irgendeinem dummen Grund eine andere Zusammenstellung! Ich werde versuchen, zur Standardkollatierung zu wechseln und zu sehen, was passiert.
Jhowe
marc Ich bekomme das jetzt: Die Spalte kann nicht geändert oder gelöscht werden, da sie für die Volltextsuche aktiviert ist.
Jhowe
1
In diesem Fall müssen Sie Ihren Volltextindex vorübergehend in dieser Tabelle
ablegen
1
Dank OP habe ich eine temporäre Tabelle eingerichtet, damit dies hilfreich war. Da ich die Tabelle jedoch nicht ändern konnte, musste ich sie zunächst korrekt deklarieren (wie folgt): DECLARE @Table TABLE (CompareMessage VARCHAR (50) COLLATE SQL_Latin1_General_CP1_CI_AS NICHT NULL)
FrostbiteXIII
1
Warum können wir nicht 2 verschiedene Sortierungen auf derselben Tabelle haben? Wenn ich 1 Spalte als nvarchar habe, die nur englische Namen und andere Spalte als russische Buchstaben benötigt, andere Spalte als japanische Buchstaben. Wie arrangiere ich das? Gibt es eine einzige Zusammenstellung, die all dies abdeckt?
Batmaci
854

Ich mache folgendes:

...WHERE 
    fieldname COLLATE DATABASE_DEFAULT = otherfieldname COLLATE DATABASE_DEFAULT

Funktioniert jedes Mal. :) :)

Walküre
quelle
68
Dies ist einer der nützlichsten Beiträge auf SO
Jamie Strauss
2
Ich habe diese Lösung verwendet, weil ich mit zwei Legacy-Systemen mit derselben Datenbank gearbeitet habe, sodass ich nicht sicher war, ob eine Änderung der Sortierung der Tabellen die Funktionalität beeinträchtigen würde.
Paolobueno
5
Wenn dieselben zwei Felder an anderen Stellen zusammen verwendet werden (Vergleiche, Gewerkschaften, Zusammenführen usw.), stellen Sie sicher, dass für jedes dieser Felder auch die angegebene Sortierung angegeben ist.
Zarepheth
5
Dies ist äußerst nützlich. Ich verwende eine lokale Datenbank und frage nach einem Verbindungsserver, und sie haben zwei verschiedene Sortierungen. Natürlich kann ich die Sortierung auf dem Verbindungsserver nicht ändern, und ich wollte meine nicht lokal ändern, daher ist dies die absolut beste Antwort.
7.
7
@ppumkin Obwohl es eine großartige Lösung ist, vermeidet es das Problem nur, anstatt es zu lösen. Es sei denn, Sie möchten die Sortierung für jede Abfrage ändern, was langwierig ist und keine optimale Leistung erbringt. Obwohl es eine großartige Antwort ist, ist die akzeptierte Antwort meiner Meinung nach die bessere.
Rob
80

Verwenden Sie die collateKlausel in Ihrer Abfrage:

LEFT JOIN C tO_C on tA.FieldName = 'CID' AND tA.oldValue COLLATE Latin1_General_CI_AS = tO_C.Name  

Möglicherweise ist die Syntax nicht genau richtig (überprüfen Sie BOL), aber Sie können dies tun, um die Sortierung für die Abfrage im laufenden Betrieb zu ändern. Möglicherweise müssen Sie die Klausel für jeden Join hinzufügen.

edit: Ich habe festgestellt, dass dies nicht ganz richtig ist - die Kollatierungsklausel folgt dem Feld, das Sie ändern müssen - in diesem Beispiel habe ich die Kollatierung im tA.oldValueFeld geändert .

Strahl
quelle
29

Identifizieren Sie die Felder, für die dieser Fehler ausgelöst wird, und fügen Sie Folgendes hinzu: COLLATE DATABASE_DEFAULT

Im Code-Feld sind zwei Tabellen verknüpft:

...
and table1.Code = table2.Code
...

Aktualisieren Sie Ihre Anfrage auf:

...
and table1.Code COLLATE DATABASE_DEFAULT = table2.Code COLLATE DATABASE_DEFAULT
...
Palak.Maheria
quelle
Vielen Dank. Wenn wir in einer Produktdatenbank arbeiten, können wir die Datenbankstruktur nicht immer so ändern, wie es die akzeptierte Antwort vorschlägt.
Jennifer Wood
20

Dies kann leicht passieren, wenn Sie 2 verschiedene Datenbanken und speziell 2 verschiedene Datenbanken von 2 verschiedenen Servern haben. Die beste Option ist, es in eine gemeinsame Sammlung zu ändern und den Join oder Vergleich durchzuführen.

SELECT 
   *
FROM sd
INNER JOIN pd ON sd.SCaseflowID COLLATE Latin1_General_CS_AS = pd.PDebt_code COLLATE Latin1_General_CS_AS
Buzzzzzzz
quelle
13

@ Walküre tolle Antwort. Ich dachte, ich habe hier einen Fall eingefügt, wenn ich dasselbe mit einer Unterabfrage in einer gespeicherten Prozedur ausführe, da ich mich gefragt habe, ob Ihre Antwort in diesem Fall funktioniert, und es war großartig.

...WHERE fieldname COLLATE DATABASE_DEFAULT in (
          SELECT DISTINCT otherfieldname COLLATE DATABASE_DEFAULT
          FROM ...
          WHERE ...
        )
Ikram M.
quelle
12

In den wo Kriterien hinzufügen collate SQL_Latin1_General_CP1_CI_AS

Das funktioniert bei mir.

WHERE U.Fullname = @SearchTerm  collate SQL_Latin1_General_CP1_CI_AS
Carlos de Jesus Baez
quelle
6

Die Hauptursache ist, dass die SQL Server-Datenbank, aus der Sie das Schema entnommen haben, eine Sortierung aufweist, die sich von Ihrer lokalen Installation unterscheidet. Wenn Sie sich keine Gedanken über die Sortierung machen möchten, installieren Sie SQL Server lokal mit derselben Sortierung wie die SQL Server 2008-Datenbank.

Robert
quelle
Hatte das gleiche Problem, müssen Sie zuerst Ihre Server- und Datenbankeigenschaft überprüfen, um
festzustellen,
5

Beim Vergleichen von Daten aus mehreren Datenbanken tritt normalerweise ein Fehler auf (Kollatierungskonflikt zwischen ... kann nicht behoben werden).

Verwenden Sie COLLATE DATABASE_DEFAULT, da Sie die Sortierung von Datenbanken jetzt nicht ändern können.

----------
AND db1.tbl1.fiel1 COLLATE DATABASE_DEFAULT =db2.tbl2.field2 COLLATE DATABASE_DEFAULT 
Chaminda Welgamage
quelle
Dies unterscheidet sich nicht von einer anderen bereits gegebenen Antwort: stackoverflow.com/a/1607725/479251
Pac0
4

Ich hatte so etwas schon einmal und wir fanden heraus, dass die Zusammenstellung zwischen zwei Tabellen unterschiedlich war.

Überprüfen Sie, ob diese gleich sind.

Adriaan Stander
quelle
4

Dank der Antwort von marc_s habe ich mein ursprüngliches Problem gelöst - inspiriert, noch einen Schritt weiter zu gehen und einen Ansatz zur Transformation einer ganzen Tabelle gleichzeitig zu veröffentlichen - tsql-Skript, um die alter column-Anweisungen zu generieren:

DECLARE @tableName VARCHAR(MAX)
SET @tableName = 'affiliate'
--EXEC sp_columns @tableName
SELECT  'Alter table ' + @tableName + ' alter column ' + col.name
        + CASE ( col.user_type_id )
            WHEN 231
            THEN ' nvarchar(' + CAST(col.max_length / 2 AS VARCHAR) + ') '
          END + 'collate Latin1_General_CI_AS ' + CASE ( col.is_nullable )
                                                    WHEN 0 THEN ' not null'
                                                    WHEN 1 THEN ' null'
                                                  END
FROM    sys.columns col
WHERE   object_id = OBJECT_ID(@tableName)

erhält: ALTER TABLE Partner ALTER COLUMN myTable NVARCHAR (4000) COLLATE Latin1_General_CI_AS NOT NULL

Ich gebe zu, verwirrt zu sein über die Notwendigkeit, col.max_length / 2 -

justSteve
quelle
Ich denke, die Division durch zwei ist erforderlich, da die Länge intern als Anzahl der Bytes gespeichert wird. Nvarchar verwendet zwei Bytes pro Zeichen anstelle von einem als varchar.
Zebi
Tolle Arbeit, wie auch immer über der Anzahl der Abfragedosen für ncha-Datentypen, wahrscheinlich wegen col.max_length / 2 -
Imran
2

Für diejenigen, die ein CREATE DATABASE-Skript (wie in meinem Fall) für die Datenbank haben, die dieses Problem verursacht, können Sie das folgende CREATE-Skript verwenden, um die Sortierung abzugleichen:

-- Create Case Sensitive Database
CREATE DATABASE CaseSensitiveDatabase
COLLATE SQL_Latin1_General_CP1_CS_AS -- or any collation you require
GO
USE CaseSensitiveDatabase
GO
SELECT *
FROM sys.types
GO
--rest of your script here

oder

-- Create Case In-Sensitive Database
CREATE DATABASE CaseInSensitiveDatabase
COLLATE SQL_Latin1_General_CP1_CI_AS -- or any collation you require
GO
USE CaseInSensitiveDatabase
GO
SELECT *
FROM sys.types
GO
--rest of your script here

Dies wendet die gewünschte Sortierung auf alle Tabellen an, was genau das war, was ich brauchte. Es ist ideal, die Sortierung für alle Datenbanken auf einem Server gleich zu halten. Hoffe das hilft.

Weitere Informationen finden Sie unter folgendem Link: SQL SERVER - Erstellen einer Datenbank mit unterschiedlicher Sortierung auf dem Server

Pechar
quelle
2

Ich habe den Inhalt dieser Site verwendet , um das folgende Skript zu erstellen, das die Sortierung aller Spalten in allen Tabellen ändert:

CREATE PROCEDURE [dbo].[sz_pipeline001_collation] 
    -- Add the parameters for the stored procedure here
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;


SELECT 'ALTER TABLE [' + SYSOBJECTS.Name + '] ALTER COLUMN [' + SYSCOLUMNS.Name + '] ' +
SYSTYPES.name + 
    CASE systypes.NAME
    WHEN 'text' THEN ' '
    ELSE
    '(' + RTRIM(CASE SYSCOLUMNS.length
    WHEN -1 THEN 'MAX'
    ELSE CONVERT(CHAR,SYSCOLUMNS.length)
    END) + ') ' 
    END

    + ' ' + ' COLLATE Latin1_General_CI_AS ' + CASE ISNULLABLE WHEN 0 THEN 'NOT NULL' ELSE 'NULL' END
    FROM SYSCOLUMNS , SYSOBJECTS , SYSTYPES
    WHERE SYSCOLUMNS.ID = SYSOBJECTS.ID
    AND SYSOBJECTS.TYPE = 'U'
    AND SYSTYPES.Xtype = SYSCOLUMNS.xtype
    AND SYSCOLUMNS.COLLATION IS NOT NULL
    AND NOT ( sysobjects.NAME LIKE 'sys%' )
    AND NOT ( SYSTYPES.name LIKE 'sys%' )

END
Chagbert
quelle
1
SYSCOLUMNS.length von nvarchar Spalten müssen durch 2 geteilt werden
palota
2

Überprüfen Sie den Grad der nicht übereinstimmenden Sortierung (Server, Datenbank, Tabelle, Spalte, Zeichen).

Wenn es der Server ist, haben mir diese Schritte einmal geholfen:

  1. Stoppen Sie den Server
  2. Finden Sie Ihr sqlservr.exe-Tool
  3. Führen Sie diesen Befehl aus:

    sqlservr -m -T4022 -T3659 -s"name_of_insance" -q "name_of_collation"

  4. Starten Sie Ihren SQL Server:

    net start name_of_instance

  5. Überprüfen Sie die Sortierung Ihres Servers erneut.

Hier gibt es mehr Infos:

https://www.mssqltips.com/sqlservertip/3519/changing-sql-server-collation-after-installation/

WholeLifeLearner
quelle
2

Wenn dies in Ihrer gesamten Datenbank auftritt, ist es besser, die DB-Sortierung wie folgt zu ändern:

USE master;  
GO  
ALTER DATABASE MyOptionsTest  
COLLATE << INSERT COLATION REQUIRED >> ;  
GO  

--Verify the collation setting.  
SELECT name, collation_name  
FROM sys.databases  
WHERE name = N'<< INSERT DATABASE NAME >>';  
GO 

Referenz hier

Justin
quelle
Leider ändert dies nicht die Sortierung für vorhandene Tabellen, sondern nur die Standardeinstellung für neue Tabellen
RockScience
2

Code zu @ JustSteves Antwort hinzugefügt, um mit den Spalten varchar und varchar (MAX) umzugehen:

DECLARE @tableName VARCHAR(MAX)
SET @tableName = 'first_notes'
--EXEC sp_columns @tableName
SELECT  'Alter table ' + @tableName + ' alter column ' + col.name
        + CASE ( col.user_type_id )
            WHEN 231
            THEN ' nvarchar(' + CAST(col.max_length / 2 AS VARCHAR) + ') '
            WHEN 167
            THEN ' varchar(' + CASE col.max_length 
                                WHEN -1 
                                THEN 'MAX'
                                ELSE 
                                CAST(col.max_length AS VARCHAR)
                                end
                                 + ') '
          END + 'collate Latin1_General_CI_AS ' + CASE ( col.is_nullable )
                                                    WHEN 0 THEN ' not null'
                                                    WHEN 1 THEN ' null'
                                                  END
FROM    sys.columns col
WHERE   object_id = OBJECT_ID(@tableName)
Goner Doug
quelle
2

Um dieses Problem in der Abfrage zu beheben, ohne eine der Datenbanken zu ändern, können Sie die Ausdrücke auf der anderen Seite des Zeichens "=" mit umwandeln

COLLATE SQL_Latin1_General_CP1_CI_AS

wie hier vorgeschlagen .

Lars Ericson
quelle
1

Ich hatte einen ähnlichen Fehler (der Kollatierungskonflikt zwischen "SQL_Latin1_General_CP1_CI_AS" und "SQL_Latin1_General_CP1250_CI_AS" in der INTERSECT-Operation konnte nicht behoben werden), als ich den alten JDBC-Treiber verwendete.

Ich habe dieses Problem behoben, indem ich einen neuen Treiber von Microsoft oder dem Open-Source-Projekt jTDS heruntergeladen habe .

krzy-wa
quelle
1

Folgendes haben wir getan: In unserer Situation muss eine Ad-hoc-Abfrage mit einer Datumsbeschränkung bei Bedarf ausgeführt werden, und die Abfrage wird in einer Tabelle definiert.

Unsere neue Abfrage muss Daten zwischen verschiedenen Datenbanken abgleichen und Daten aus beiden enthalten.

Es scheint, dass sich die COLLATION zwischen der Datenbank, die Daten aus dem iSeries / AS400-System importiert, und unserer Berichtsdatenbank unterscheidet - dies könnte an den spezifischen Datentypen liegen (z. B. griechische Akzente auf Namen usw.).

Also haben wir die folgende Join-Klausel verwendet:

...LEFT Outer join ImportDB..C4CTP C4 on C4.C4CTP COLLATE Latin1_General_CS_AS=CUS_Type COLLATE Latin1_General_CS_AS
Unser Mann in Bananen
quelle
1

Sie können dies leicht in 4 einfachen Schritten tun

  1. Sichern Sie Ihre Datenbank, nur für den Fall
  2. Datenbankkollatierung ändern: Klicken Sie mit der rechten Maustaste auf Datenbank, wählen Sie Eigenschaften aus, gehen Sie zu den Optionen und ändern Sie die Kollatierung in die gewünschte Kollatierung.
  3. Generieren Sie ein Skript zum Löschen und Neuerstellen aller Datenbankobjekte: Klicken Sie mit der rechten Maustaste auf Ihre Datenbank, wählen Sie Aufgaben aus, wählen Sie Skript generieren ... (Stellen Sie sicher, dass Sie in den erweiterten Optionen des Assistenten Drop & Create auswählen, und wählen Sie auch Schema & Daten aus.)
  4. Führen Sie das oben generierte Skript aus
Felix Mwiti Mugambi
quelle
1
INSERT INTO eSSLSmartOfficeSource2.[dbo].DeviceLogs  (DeviceId,UserId,LogDate,UpdateFlag) 
SELECT DL1.DeviceId ,DL1.UserId COLLATE DATABASE_DEFAULT,DL1.LogDate 
,0 FROM eSSLSmartOffice.[dbo].DeviceLogs DL1 
WHERE  NOT EXISTS 
(SELECT DL2.DeviceId ,DL2.UserId COLLATE DATABASE_DEFAULT
,DL2.LogDate ,DL2.UpdateFlag 
FROM eSSLSmartOfficeSource2.[dbo].DeviceLogs DL2    
WHERE  DL1.DeviceId =DL2.DeviceId
 and DL1.UserId collate  Latin1_General_CS_AS=DL2.UserId collate  Latin1_General_CS_AS
  and DL1.LogDate =DL2.LogDate )
Arati
quelle
0

Möglicherweise haben Sie keinerlei Kollatierungsprobleme in Ihrer Datenbank. Wenn Sie jedoch eine Kopie Ihrer Datenbank aus einer Sicherung auf einem Server mit einer anderen Kollatierung als dem Ursprung wiederherstellen und Ihr Code temporäre Tabellen erstellt, erben diese temporären Tabellen die Kollatierung von der Server und es würde Konflikte mit Ihrer Datenbank geben.

ajeh
quelle
0
ALTER DATABASE test2            --put your database name here
COLLATE Latin1_General_CS_AS    --replace with the collation you need
Jigs
quelle
0

Ich hatte eine ähnliche Anforderung; Dokumentation meines Ansatzes hier für alle mit einem ähnlichen Szenario ...

Szenario

  • Ich habe eine Datenbank aus einer Neuinstallation mit den richtigen Sortierungen.
  • Ich habe eine andere Datenbank, die die falschen Sortierungen hat.
  • Ich muss das letztere aktualisieren, um die auf dem ersteren definierten Kollatierungen zu verwenden.

Lösung

Verwenden Sie den SQL Server-Schema-Vergleich (von SQL Server Data Tools / Visual Studio), um die Quelle (Neuinstallation) mit dem Ziel (die Datenbank mit ungültiger Sortierung) zu vergleichen.

In meinem Fall habe ich die beiden DBs direkt verglichen; Sie könnten jedoch über ein Projekt arbeiten, um die dazwischen liegenden Teile manuell zu optimieren ...

  • Führen Sie Visual Studio aus
  • Erstellen Sie ein neues SQL Server-Datenprojekt
  • Klicken Sie auf Extras, SQL Server, Neuer Schemavergleich
  • Wählen Sie die Quellendatenbank aus
  • Wählen Sie die Zieldatenbank aus
  • Klicken Sie auf Optionen (⚙)
    • Wählen Object TypesSie unter nur die Typen aus, an denen Sie interessiert sind (für mich war es nur Viewsund Tables)
    • Unter GeneralWählen Sie:
      • Blockieren Sie möglichen Datenverlust
      • Deaktivieren und erneutes Aktivieren von DDL-Triggern
      • Ignorieren Sie den Dateipfad des kryptografischen Anbieters
      • Datei- und Protokolldateipfad ignorieren
      • Dateigröße ignorieren
      • Ignorieren Sie die Platzierung der Dateigruppe
      • Pfad der Volltextkatalogdatei ignorieren
      • Keyword-Groß- / Kleinschreibung ignorieren
      • Anmelde-SIDs ignorieren
      • Ignorierte Bezeichner ignorieren
      • Routenlebensdauer ignorieren
      • Semikolon zwischen Anweisungen ignorieren
      • Leerzeichen ignorieren
      • Skriptaktualisierungsmodul
      • Skriptüberprüfung für neue Einschränkungen
      • Überprüfen Sie die Kompatibilität der Sortierung
      • Überprüfen Sie die Bereitstellung
  • Klicken Sie auf Vergleichen
    • Deaktivieren Sie alle Objekte, die zum Löschen markiert sind (Hinweis: Diese haben möglicherweise immer noch Sortierprobleme. Da sie jedoch nicht in unserer Quell- / Vorlagen-Datenbank definiert sind, wissen wir es nicht. In beiden Fällen möchten wir keine Dinge verlieren, wenn wir es sind nur auf Kollatierungsänderungen abzielen). Sie können alle auf einmal deaktivieren, indem Sie mit der rechten Maustaste auf den DELETEOrdner klicken und auswählen EXCLUDE.
    • Ebenso für alle ausschließen CREATE Objekte ausschließen (hier, da sie im Ziel nicht vorhanden sind, können sie dort nicht die falsche Sortierung haben; ob sie existieren sollten, ist eine Frage für ein anderes Thema).
    • Klicken Sie unter ÄNDERN auf jedes Objekt, um das Skript für dieses Objekt anzuzeigen. Verwenden Sie das Diff, um sicherzustellen, dass wir nur die Sortierung ändern (alle anderen manuell erkannten Unterschiede möchten Sie wahrscheinlich manuell ausschließen / behandeln).
  • Klicken Sie hier Update, um die Änderungen zu verschieben

Dies erfordert immer noch einige manuelle Anstrengungen (z. B. die Überprüfung, ob Sie nur die Sortierung beeinflussen) - es werden jedoch Abhängigkeiten für Sie behandelt.

Sie können auch ein Datenbankprojekt des gültigen Schemas behalten, sodass Sie eine universelle Vorlage für Ihre DBs verwenden können, wenn Sie mehr als 1 zum Aktualisieren haben, vorausgesetzt, alle Ziel-DBs sollten dasselbe Schema haben.

Sie können auch Suchen / Ersetzen für die Dateien in einem Datenbankprojekt verwenden, wenn Sie die Einstellungen dort massenhaft ändern möchten (z. B. können Sie das Projekt mithilfe des Schema-Vergleichs aus der ungültigen Datenbank erstellen, die Projektdateien ändern und dann die Quelle / das Ziel umschalten das Schema vergleichen, um Ihre Änderungen zurück in die DB zu übertragen).

JohnLBevan
quelle