2016-05-06 19 views
1

Ich bekomme 'Kann nicht den Kollationskonflikt zwischen "Latin1_General_CI_AS" und "SQL_Latin1_General_CP1_CI_AS" in der Operation gleich.' Error.Sortierung in Stored Procedure

Der Fehler ist in einem SP, ich bin nicht die Sortierung überall Angabe, weder in der Tabelle erstellen, und wenn ich

select t.name, c.*, c.collation_name 
from sys.columns c 
left join sys.tables t 
on c.object_id = t.object_id 
order by c.collation_name 

verwenden Sie sagt, es gibt keine ‚Latin1_General_CI_AS‘ Felder, alle Felder sind Verwenden der Standardsortierung. Ich gebe ein Dataset zurück, kann aber nicht sehen, wo der Fehler liegt. Es gibt keine Joins. Ich befülle erneut eine temporäre Tabelle, die die Sortierung nicht angibt, aber sie sagt, dass ein Fehler vorliegt. Irgendwelche Vorschläge. Verwenden von SQL Server 2014.

+0

vielleicht ein Auslöser? –

+0

Guter Vorschlag, aber ich habe keine Trigger in der Datenbank. – MiscellaneousUser

+2

* "Ich beziehe eine temporäre Tabelle erneut, ohne die Sortierung anzugeben *" - Wenn Sie eine temporäre Tabelle erstellen, verwendet sie die Sortierung in tempdb, die möglicherweise nicht mit der Sortierung der von Ihnen verwendeten Datenbank übereinstimmt. Dies könnte die Ursache des Konflikts sein. Versuchen Sie 'SELECT collation_name FROM sys.databases WHERE name IN ('tempdb', 'YourDatabase')' auszuführen und sehen Sie, ob Sie zwei verschiedene Kollatierungen erhalten – GarethD

Antwort

1

Temporäre Tabellen verwenden die Sortierung tempdb standardmäßig, außer wenn im Kontext einer contained database verwendet.

Sie können COLLATE DATABASE_DEFAULT angeben, damit die Sortierung der aktuellen Datenbank verwendet wird.

CREATE TABLE #T 
(
SomeColumn VARCHAR(50) COLLATE DATABASE_DEFAULT 
) 
+0

So habe ich es am Ende gemacht. – MiscellaneousUser