2014-05-06 11 views
8

Mam tabelę tymczasową, która pobiera dane za pomocą wkładki zbiorczej. Jednak gdy chcę zaktualizować dane z tabeli temp do zwykłej tabeli, daje to problemy z sortowaniem. Wiem, jak rozwiązać ten problem za pomocą coś takiego:Poprawny sposób ustawiania sortowania w tymczasowej kolumnie tabeli 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 

Ale czy istnieje sposób, aby ustawić sortowanie w tabeli tymczasowej natychmiast, dzięki czemu nie trzeba używać zestawiać w sprzężeniu? Coś takiego:

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

Czy to jest prawidłowe kodowanie i czy należy ustawić układanie raz na tabelę lub na kolumnę? A jeśli sortowanie jest ustawione w tabeli, czy można wykluczyć sortowanie z join?

Odpowiedz

11

Możesz użyć COLLATE database_default w definicji tabeli tymczasowej za pomocą opisanej przez Ciebie składni, dzięki czemu każda kolumna będzie kompatybilna z bazą danych.

Musisz ustawić go jawnie na kolumnę. Brak domyślnego sortowania na poziomie tabeli. Istnieje domyślne sortowanie na poziomie bazy danych, ale dla tempdb jest to zawsze równe domyślnemu sortowaniu bazy danych model, która domyślnie jest sortowaniem na serwerze.

Jeśli ustawisz sortowanie w kolumnie tabeli, możesz nadal przesłonić je w zapytaniu, tak jak już doświadczyłeś.

+0

Dzięki @ Christiana Haytera, więc jeśli ustawię COLLATE database_default dla każdej kolumny, nie muszę już używać sortowania w join? Po prostu z ciekawości, czy istnieje sposób sprawdzenia, jakie jest domyślne ustawienie sortowania serwerów? – J3FFK

+0

@ J3FFK: To prawda. Jeśli chodzi o przeglądanie bieżącego sortowania, to jestem pewien, że istnieje funkcja T-SQL, aby to uzyskać, ale zwykle po prostu wywołuję okno dialogowe właściwości bazy danych w Management Studio. :-) –

+0

@ J3FFK: Możesz odczytać sortowanie db z 'master.sys.databases.collation_name' Thanks! –

1

Natrafiliśmy teraz na ten sam problem. Zamiast dodawać sortowanie do każdego połączenia tabeli tymczasowej, właśnie zmieniliśmy tworzenie tabeli tymczasowej na deklarację zmiennej tabeli.

Powiązane problemy