2017-02-09 4 views
-1

Ich habe den folgenden Code und erhalte den folgenden Fehler:Sortierungskonflikt für Nicht-beitreten T-SQL-Code

Msg 468, Level 16, State 9, Line 37 
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS_KS_WS" in the equal to operation. 

Was soll ich tun, um dieses zu lösen? Alles, was ich online gefunden habe, hat mit verbundenen Tabellen zu tun.

IF OBJECT_ID('SeanVault.dbo.TempVarIDs', 'U') IS NOT NULL 
     DROP TABLE SeanVault.dbo.TempVarIDs; 
    Select VariableID, VariableName 
    INTO SeanVault.dbo.TempVarIDs 
    from Variable 
      Where VariableName in (select VariableName from SeanVault.dbo.TempVarNames) 
+0

'Wo Variablenname in (wählen Sie Variablenname von SeanVault.dbo.TempVarNames) COLLATE SQL_Latin1_General_CP1_CI_AS' – Lamak

+0

@Lamak Warum ist dies ein Kommentar und keine Antwort? – iamdave

+0

@iamdave Weil ein Code nur eine Antwort ist keine gute Antwort ... und ich bin ein bisschen müde, also möchte ich nicht schreiben, was benötigt wird, um es eine gute Antwort zu machen – Lamak

Antwort

0

Ihre zwei Spalten VariableID und Variablennamen haben eine andere Sortierung. Sie können die Sortierungs Konfiguration umgehen (wenn Sie nicht zum Beispiel Datenmodell steuern kann), durch eine explizite Sortierungs Bereitstellung:

IF OBJECT_ID('SeanVault.dbo.TempVarIDs', 'U') IS NOT NULL 
    DROP TABLE SeanVault.dbo.TempVarIDs; 
Select VariableID, VariableName 
INTO SeanVault.dbo.TempVarIDs 
from Variable 
Where VariableName COLLATE SQL_Latin1_General_CP1_CI_AS in (select VariableName COLLATE SQL_Latin1_General_CP1_CI_AS from SeanVault.dbo.TempVarNames) 

Eine langfristige Lösung wäre, um Ihre Spalten Definition zu ändern und Hinzufügen der gewünschten Sortierungs :

ALTER TABLE Variable 
     ALTER COLUMN VariableID COLLATE SQL_Latin1_General_CP1_CI_AS 
GO 

    ALTER TABLE TempVarNames 
     ALTER COLUMN TempVarNames COLLATE SQL_Latin1_General_CP1_CI_AS 
GO 
+0

Perfekt! Danke, es hat funktioniert. Dies sind Tabellen, die temporär verwendet und gelöscht werden, nachdem die Prozedur ausgeführt wurde. Ich denke also nicht, dass ich die ALTER-Route gehen werde. – SeanDon

Verwandte Themen