Der Sortierkonflikt zwischen "SQL_Latin1_General_CP1_CI_AS" und "Latin1_General_CI_AS" in der Operation "Gleich" kann nicht aufgelöst werden
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
Wenn der code ausgeführt wird, erhalte ich die Fehlermeldung eingefügt in den Titel, nach dem hinzufügen der zwei joins für eine Tabelle C. ich denke, das könnte etwas mit der Tatsache zu tun, ich bin mit SQL Server 2008 und haben wieder eine Kopie dieser db auf meinem Rechner, die ist von 2005.
InformationsquelleAutor der Frage jhowe | 2009-10-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einem Konflikt von zwei unterschiedlichen Sortierungen in der Tabelle. Sie können überprüfen, was Sortierungen jede Spalte in der Tabelle(s) hat durch die Nutzung dieser Abfrage:
Sortierungen erforderlich sind, und verwendet bei der Bestellung und dem vergleichen von strings. Es ist generell eine gute Idee zu haben, einen einzelnen, eindeutigen Sortierung ganzen Datenbank - verwenden Sie keine verschiedenen Sortierungen innerhalb einer einzelnen Tabelle oder Datenbank, sind Sie nur ärger bringen....
Sobald Sie sich entschieden haben, für eine einzige Sortierung können Sie ändern, Tabellen /Spalten, die nicht entsprechen, aber mit diesem Befehl:
Marc
UPDATE: finden Sie die fulltext-Indizes in Ihrer Datenbank haben, verwenden Sie diese Abfrage hier:
Können Sie dann die drop fulltext index verwenden:
InformationsquelleAutor der Antwort marc_s
Ich Folgendes tun:
Funktioniert jedes mal. 🙂
InformationsquelleAutor der Antwort Valkyrie
Verwenden Sie die
collate
- Klausel in der Abfrage:Kann ich nicht die syntax genau (prüfen BOL), aber Sie können dies tun, um die Sortierung zu ändern on-the-fly für die Abfrage, müssen Sie die Klausel für jeden join.
edit: ich erkannte, das war nicht ganz richtig - die collate-Klausel geht nach dem Feld, das Sie ändern möchten - in diesem Beispiel änderte ich die Sortierung auf die
tA.oldValue
Feld.InformationsquelleAutor der Antwort Ray
Identifizieren Sie die Felder, für die es wirft diesem Fehler, und fügen Sie Folgendes zu Ihnen:
COLLATE DATABASE_DEFAULT
Gibt es zwei Tabellen verbunden, die auf Code-Feld:
Aktualisieren Sie Ihre Abfrage:
InformationsquelleAutor der Antwort Palak.Maheria
@Valkyrie genial Antwort. Dachte, ich lege hier ein Fall bei der Durchführung der gleichen mit einer Unterabfrage Innenseiten einer gespeicherten Prozedur, da fragte ich mich, ob deine Antwort funktioniert in diesem Fall, und es war genial.
...WHERE fieldname COLLATE DATABASE_DEFAULT in (
select distinct otherfieldname COLLATE DATABASE_DEFAULT
from ...
where ...
)
InformationsquelleAutor der Antwort Ikram M.
Dies kann leicht passieren, wenn du 2 verschiedene Datenbanken und speziell 2 verschiedene Datenbanken, die von 2 verschiedenen Servern. Beste option zu ändern, um eine gemeinsame Sammlung und machen die Verknüpfung oder Vergleich.
InformationsquelleAutor der Antwort Bazzzzzzz
Die Ursache ist, dass die sql server-Datenbank, die Sie nahm, von der das schema hat Sie eine Sortierung, die unterscheidet sich von Ihrer lokalen installation. Wenn Sie nicht wollen, zu kümmern Sortierung neu installieren Sie SQL Server lokal verwenden dieselbe Sortierung wie der SQL Server 2008-Datenbank.
InformationsquelleAutor der Antwort Robert
Ich hatte so etwas vor, und was wir fanden war, dass die Sortierung zwischen 2 Tabellen waren unterschiedlich.
Überprüfen Sie, ob diese identisch sind.
InformationsquelleAutor der Antwort Adriaan Stander
Für diejenigen, die haben eine DATENBANK ERSTELLEN script (war mein Fall) für die Datenbank, die das Problem verursacht, können Sie verwenden Sie das folgende Skript ERSTELLEN entsprechend der Sortierung:
oder
Gilt dies für die gewünschte Sortierung auf alle Tabellen, was genau das war, was ich brauchte. Es ist ideal, um zu versuchen und halten die Sortierung ist die gleiche für alle Datenbanken auf einem server.
Hoffe, das hilft.
Mehr info auf den folgenden link: SQL SERVER – Erstellen einer Datenbank mit Verschiedenen Sortierungen auf Server
InformationsquelleAutor der Antwort pechar
Dank marc_s Antwort löste ich meine ursprüngliche problem - inspiriert noch einen Schritt weiter und veröffentlichen eine Methode zur Umwandlung einer ganzen Tabelle auf einer Zeit - tsql-Skript zu generieren, die alter column-Anweisungen:
bekommt:
ALTER TABLE Affiliate ALTER COLUMN myTable vom Datentyp NVARCHAR(4000) COLLATE Latin1_General_CI_AS not NULL
Werde ich zugeben, dass er verwirrt durch die Notwendigkeit, col.max_length /2 -
InformationsquelleAutor der Antwort justSteve
Habe ich genutzt, den Inhalt dieser Website zu erstellen das folgende Skript, das änderungen Sortierung aller Spalten in allen Tabellen:
InformationsquelleAutor der Antwort Chagbert
Fehler (beheben Können, die Sortierung Konflikt zwischen .... ) tritt in der Regel beim Vergleich von Daten aus mehreren Datenbanken.
da können Sie nicht ändern Sie die Sortierung von Datenbanken jetzt mit COLLATE DATABASE_DEFAULT.
InformationsquelleAutor der Antwort chaminda welgamage
Wenn dies geschieht, über die gesamte DB, dann ist es besser, ändern Ihre DB-Sortierung etwa so:
Referenz hier
InformationsquelleAutor der Antwort Justin
Hatte ich eine ähnliche Fehlermeldung (kann Nicht beheben Sie das sortierungskonflikt zwischen "SQL_Latin1_General_CP1_CI_AS" und "SQL_Latin1_General_CP1250_CI_AS" in der INTERSECT-Vorgang), wenn ich in den alten jdbc-Treiber.
Ich dieses Problem gelöst, durch das herunterladen neuer Treiber aus Microsoft oder open-source-Projekt jTDS.
InformationsquelleAutor der Antwort krzy-wa
hier ist, was wir haben, in unserer situation brauchen wir einen ad-hoc-Abfrage mit datumseinschränkung auf Nachfrage, und für die Abfrage definiert ist, in einer Tabelle.
Unsere neue Abfrage übereinstimmen muss Daten zwischen verschiedenen Datenbanken und Daten von Ihnen beiden.
Scheint es, dass die SORTIERUNG unterscheidet zwischen der db, importiert Daten aus der iSeries/AS400-system, und unsere reporting-Datenbank - dies könnte sein, weil die spezifischen Daten-Typen (wie die griechischen Akzente bei Namen und so weiter).
So nutzten wir die unten join-Klausel:
InformationsquelleAutor der Antwort Our Man in Bananas
ALTER DATABASE test2 -- setzen Sie Ihre Datenbank-Namen hier
COLLATE Latin1_General_CS_AS -- ersetzen mit was auch immer-Sortierung müssen Sie
InformationsquelleAutor der Antwort jig's
Könnten Sie ganz einfach tun dies mit Hilfe von 4 einfachen Schritten
InformationsquelleAutor der Antwort Felix Mwiti Mugambi
Überprüfen Sie die Höhe der Sortierung, die nicht (server, Datenbank,Tabelle,Spalte,Zeichen).
Wenn es ein server ist, diese Schritte half mir einmal:
Diesen Befehl ausführen:
sqlservr -m -T4022 -T3659 -s"name_of_insance"
-q "name_of_collation"
Starten Sie Ihren sql-server:
net start name_of_instance
Überprüfen Sie die Sortierung des Servers wieder.
Hier ist mehr info:
https://www.mssqltips.com/sqlservertip/3519/changing-sql-server-collation-after-installation/
InformationsquelleAutor der Antwort WholeLifeLearner
InformationsquelleAutor der Antwort Arati