2014-05-06 20 views
8

Ich habe eine temporäre Tabelle, die Daten mithilfe von Masseneinfügung einfügt. Wenn ich jedoch Daten aus der temporären Tabelle in eine normale Tabelle aktualisieren möchte, führt dies zu Sortierproblemen. Ich weiß, wie diese zu lösen, indem sie mit so etwas wie:Korrekter Weg zur Festlegung der Kollatierung in der temporären Tabellenspalte TSQL

UPDATE RegularTable 
SET r.Column1 = t.ColumnA 
FROM RegularTable r INNER JOIN #TEMP t ON 
r.Column1 COLLATE DATABASE_DEFAULT = 
t.ColumnA COLLATE DATABASE_DEFAULT 

Aber ist es eine Möglichkeit, die Sortierung in der temporären Tabelle zu setzen sofort, so dass Sie müssen nicht in der Join collate verwenden? Etwas wie:

CREATE TABLE #TEMP 
Column1 varchar(255) COLLATE database_default, 
Column2 varchar(60) 

Ist das korrekt Codierung und müssen Sie die Sortierung einmal pro Tabelle oder pro Spalte festlegen? Und wenn die Sortierung in der Tabelle festgelegt ist, können Sie dann die Sortierung von der Verknüpfung ausschließen?

Antwort

11

Sie können COLLATE database_default in der temporären Tabellendefinition mit der von Ihnen beschriebenen Syntax verwenden, wodurch jede Spalte sortierkompatibel mit Ihrer Datenbank wird.

Sie müssen es explizit pro Spalte festlegen. Es gibt keine Standardsortierung auf Tabellenebene. Es gibt eine Standardsortierung auf Datenbankebene, aber für tempdb ist dies immer gleich der Standardsortierung der model-Datenbank, die standardmäßig die Serversortierung ist.

Wenn Sie die Sortierung für die Tabellenspalte festlegen, können Sie diese in einer Abfrage überschreiben, wie Sie bereits erfahren haben.

+0

Danke @Christian Hayter, also, wenn ich COLLATE database_default für jede Spalte gesetzt habe, muss ich nicht mehr die Kollation im Join verwenden? Nur aus Neugier, gibt es eine Möglichkeit zu sehen, was die Standard-Server-Sortiereinstellung ist? – J3FFK

+0

@ J3FFK: Das ist richtig. Was die Anzeige der aktuellen Kollatierung anbelangt, bin ich mir sicher, dass es eine T-SQL-Funktion gibt, um sie zu erhalten, aber normalerweise öffne ich einfach den Datenbankeigenschaften-Dialog in Management Studio. :-) –

+0

@ J3FFK: Sie können die db Kollation von 'master.sys.databases.collation_name' lesen –

1

Wir haben jetzt das gleiche Problem. Anstatt die Sortierung zu jeder temporären Tabellenverknüpfung hinzuzufügen, haben wir lediglich die temporäre Tabellenerstellung in eine Tabellenvariablendeklaration geändert.