Nienawidzę wielkości liter w bazach danych, ale rozwijam się dla klienta, który z niego korzysta. Jak mogę włączyć tę opcję na moim serwerze SQL, więc mogę być pewny, że otrzymałem tę sprawę we wszystkich moich pytaniach?Jak zmienić SQL Server 2005, aby rozróżniać małe i wielkie litery?
Odpowiedz
Jak o:
ALTER DATABASE database_name COLLATE collation_name
See BOL na list of collation options i wybrać jeden przypadek wrażliwego, który najlepiej pasuje do Twoich potrzeb (to znaczy jeden klient korzysta).
Oczywiście, dobrym pomysłem jest wykonanie pełnej kopii zapasowej bazy danych przed wypróbowaniem tego. Nigdy osobiście nie próbowałem używać bazy danych z innym sortowaniem niż domyślne sortowanie na serwerze, więc nie znam żadnych "gotch". Ale jeśli masz dobre kopie zapasowe i przetestujesz je w swoim środowisku przed wdrożeniem go do swojego klienta, nie mogę sobie wyobrazić, że wiąże się to z dużym ryzykiem.
Będziesz musiał zmienić sortowanie bazy danych. Będziesz także musiał zmienić sortowanie na poziomie tabeli i kolumny. Uważam, że możesz znaleźć skrypt tam, jeśli google go.
W rzeczywistości nie trzeba zmieniać sortowania w całej bazie danych, jeśli zadeklarowano je w tabeli lub kolumnach, w których należy uwzględnić wielkość liter. W rzeczywistości można go w razie potrzeby dołączyć do poszczególnych operacji.
SELECT name WHERE 'greg' = name COLLATE Latin1_GENERAL_CS_AS
Wiem, powiedziałeś, że chcesz to zastosować w całej bazie danych. Wspomnę o tym, ponieważ w niektórych środowiskach hostowanych nie można kontrolować tej właściwości, która jest ustawiana podczas tworzenia bazy danych.
Jeśli masz bazę danych, która różni się od domyślnej instancji, możesz napotkać problemy podczas próby dołączania do tabel z tymczasowymi. Tabele tymczasowe muszą porównywać instancję (ponieważ są obiektami systemowymi), więc musisz użyć klauzuli COLLATE database_default w swoich połączeniach.
select temp.A, table.B
from #TEMPORARY_TABLE temp inner join table
on temp.X COLLATE database_default = table.Y
Wymusza sortowanie temp.X (w tym przykładzie) na sortowanie bieżącego DB.
ale nie rób tego, używając LOWER() do kolumny, w przeciwnym razie nie będzie można użyć indeksu ... –
Ah, dzięki za napiwek. Zaadaptowałem tę linię ze skryptu, którego używam ... ale naprawię próbkę. – harpo