Kiedy tworzysz aplikację lub piszesz kod w systemie baz danych SQL, kluczowe jest zrozumienie, w jaki sposób dane będą sortowane i porównywane. Możesz przechowywać swoje dane w określonym języku lub możesz chcieć, aby program SQL Server oddzielnie traktował dane z rozróżnianiem wielkości liter i bez rozróżniania wielkości liter. Firma Microsoft udostępniła ustawienie serwera SQL o nazwie Sortowanie do kontrolowania i spełniania takich wymagań.
Co to jest sortowanie w SQL Server?
Możemy ustawić sortowanie na różnych poziomach w SQL Server, jak podano poniżej.
- Poziom serwera
- Poziom bazy danych
- Poziom kolumny
- Poziom ekspresji
Sortowanie na poziomie serwera może być czasami nazywane posortowaniem na poziomie instancji SQL Server .
Sortowanie na poziomie bazy danych zostanie odziedziczone z ustawienia sortowania na poziomie serwera, jeśli podczas tworzenia bazy danych nie wybierzesz żadnego konkretnego sortowania. Sortowanie na poziomie bazy danych można również zmienić później. Zwróć uwagę, że zmiana sortowania bazy danych zostanie zastosowana tylko do nadchodzących lub nowych obiektów, które zostaną utworzone po zmianie sortowania.
Nowe sortowanie nie zmodyfikuje istniejących danych przechowywanych w tabelach, które zostały posortowane według ostatniego typu sortowania. Zespół ds. aplikacji potrzebuje dalszego planowania, aby obsłużyć tę konwersję przechowywanych danych ze względu na nowe ustawienie sortowania.
Jest na to kilka sposobów. Jednym z nich jest skopiowanie danych z istniejącej tabeli do nowej tabeli utworzonej z nowym sortowaniem, a następnie zastąpienie starej tabeli nową. Możesz również przenieść dane z tabeli do nowej bazy danych poprzez nowe sortowanie i zamienić starą bazę danych na nową.
UWAGA :Zmiana sortowania jest złożonym zadaniem i należy tego unikać, chyba że masz obowiązkowe uzasadnienie biznesowe.
Jak znaleźć i zmienić sortowanie bazy danych w SQL Server?
Przejdźmy dalej i sprawdźmy zestawienie instancji SQL Server i wszystkich baz danych hostowanych na tej instancji. Sortowanie można sprawdzić, uzyskując dostęp do właściwości na poziomie bazy danych lub instancji okna za pomocą SQL Server Management Studio lub po prostu wykonując poniższą instrukcję T-SQL. Sortowanie dla każdej bazy danych jest przechowywane w obiekcie systemowym sys.databases – uzyskamy do niego dostęp, aby uzyskać te informacje.
--Check Database Collation
SELECT name, collation_name
FROM sys.databases
GO
--Check Server or Instance level Collation
SELECT SERVERPROPERTY('Collation') As [Instance Level Collation]
Wykonałem powyższą instrukcję T-SQL i otrzymałem poniższe dane wyjściowe. Widzimy, że wszystkie bazy danych i sortowanie na poziomie serwera mają takie same ustawienia jak SQL_Latin1_General_CP1_CI_AS . Oznacza to, że sortowanie bazy danych zostało odziedziczone przez sortowanie na poziomie serwera podczas ich tworzenia, a domyślna wartość nie została zmieniona.
Teraz pokażę, jak sprawdzić sortowanie bazy danych za pomocą GUI w SQL Server Management Studio.
Najpierw połącz się z instancją programu SQL Server za pomocą programu SQL Server Management Studio. Rozwiń węzeł instancji, a za nim Bazy danych teczka. Kliknij prawym przyciskiem myszy docelową bazę danych i wybierz Właściwości :
Otrzymasz poniższe Właściwości bazy danych okno.
Teraz kliknij Opcje zakładka z panelu po lewej stronie. Otrzymasz wiele ustawień właściwości w prawym panelu. Składanie jest pierwszą właściwością tej strony – widać, że jest taka sama jak w powyższym skrypcie T-SQL.
Podobnie możesz kliknąć węzeł instancji SQL Server i kliknąć prawym przyciskiem myszy właściwości na poziomie instancji aby zobaczyć sortowanie na poziomie serwera.
Jeśli chcesz zmienić to sortowanie na nowe, wystarczy kliknąć Sortowanie menu rozwijanego i wybierz potrzebną opcję. Upewnij się, że wykonałeś pełną kopię zapasową bazy danych, zanim to zrobisz.
Wybrałem podobne zestawienie z rozróżnianiem wielkości liter SQL_Latin1_General_CP1_CS _Jako dla tej bazy danych i kliknąłem OK aby go zastosować. Uwaga:upewnij się, że podczas tej procedury nikt nie jest połączony z docelową bazą danych, w przeciwnym razie musisz zmienić tryb na jeden użytkownik jeden i zmień tę konfigurację.
Możesz również zmienić to sortowanie bazy danych za pomocą instrukcji T-SQL. W tym celu użyj COLLATE klauzula instrukcji ALTER DATABASE.
Najpierw zmieniliśmy bazę danych na pojedynczy użytkownik trybu, następnie zmienił sortowanie i na koniec przeniósł bazę danych do wielu użytkowników tryb.
--Change Database Collation using T-SQL
USE master;
GO
Alter DATABASE [AdventureWorks2019] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [AdventureWorks2019]
COLLATE SQL_Latin1_General_CP1_CI_AS;
GO
Alter DATABASE [AdventureWorks2019] SET MULTI_USER
Wymień wszystkie obsługiwane sortowania w SQL Server
W tej sekcji dowiesz się, jak znaleźć wszystkie dostępne sortowania w SQL Server. Najpierw pokażę, jak uzyskać listę wszystkich obsługiwanych sortowań dla instancji SQL Server.
SQL Server ma funkcję systemową o nazwie fn_helpcollations() którego możesz użyć do pobrania wszystkich zestawień.
Uruchom poniższe polecenie, aby wyświetlić listę.
--Display the list of all collations
SELECT name, description FROM fn_helpcollations()
Widzimy wszystkie obsługiwane przez 5508 sortowania w sekcji danych wyjściowych. Jeśli nie masz pewności, które sortowanie wybrać, możesz użyć klauzuli WHERE w poniższym skrypcie, aby odfiltrować wszystkie możliwe sortowania, które można ustawić w bazie danych.
Załóżmy, że musisz przechowywać swoje dane w języku angielskim (USA) i chcesz, aby SQL Server obsługiwał je w formacie uwzględniającym wielkość liter. Możesz użyć poniższego polecenia, aby pobrać listę możliwych i obsługiwanych sortowań dla Twojego zapytania:
--Display the list of all collations with WHERE clause
SELECT Name, Description FROM fn_helpcollations()
WHERE Name like 'SQL_Latin1%' AND Description LIKE '%case-sensitive%’
Wynik pokazuje tylko 10 zestawień spełniających Twoje zapytanie. Możesz użyć powyższego skryptu, aby odfiltrować różne sortowania.
Wpływ zmiany sortowania bazy danych na wynik zapytania
W tej sekcji pokażę różnicę między dwoma wyjściami tego samego zapytania, gdy są one wykonywane z różnymi sortowaniami.
Najpierw stworzę bazę danych o nazwie MSSQL z sortowaniem (SQL_Latin1_General_CP1_CS _Jako ). Następnie dwukrotnie uruchomię to samo zapytanie, aby uzyskać dane wyjściowe. Później zmienię sortowanie na SQL_Latin1_General_CP1_CI _Jako i ponownie uruchom te same zapytania, aby uzyskać ich dane wyjściowe. Możesz porównać oba wyniki i zrozumieć wpływ zmiany sortowania bazy danych. Zacznijmy więc od tworzenia bazy danych.
Uruchom nowe okno tworzenia bazy danych, jak pokazano na poniższym obrazku. Możesz również utworzyć tę bazę danych za pomocą T-SQL. Następnie możesz zobaczyć nazwę bazy danych i jej pliki danych. Teraz kliknij drugą zakładkę na lewym panelu, aby przejść do okna właściwości sortowania.
Widać, że nazwa sortowania dla tej bazy danych jest domyślna . Oznacza to, że ta baza danych odziedziczy sortowanie po typie sortowania na poziomie serwera. Kliknij Składanie rozwijane, aby wybrać nowe sortowanie.
Wybrałem poniższe zestawienie SQL_Latin1_General_CP1_CS _Jako dla tej bazy danych – nie domyślnej. Kliknij OK aby kontynuować tworzenie bazy danych.
Teraz sprawdź sortowanie bazy danych dla nowo utworzonej bazy danych. Widzimy, że to SQL_Latin1_General_CP1_CS _Jako jak wybraliśmy w poprzednim kroku.
W SQL_Latin1_General_CP1_CS _Jako , CS oznacza z uwzględnieniem wielkości liter tryb i CI oznacza niewrażliwy na wielkość liter tryb. Teraz możesz uruchomić poniższy kod T-SQL lub dowolny kod, aby uzyskać dane wyjściowe.
Dwukrotnie wykonałem to samo polecenie. Pierwszy skrypt filtruje nazwy kolumn z wartością SYS w stolicy litery, podczas gdy drugi skrypt odfiltruje tę samą kolumnę z tą samą wartością sys w małym listy. Sekcja danych wyjściowych pokazuje, że pierwszy skrypt nie pokazał żadnych danych wyjściowych, podczas gdy drugi skrypt wyświetlił dane wyjściowe ze względu na jego zachowanie uwzględniające wielkość liter.
Select * from sysusers
Where name=’SYS’
Go
Select * from sysusers
Where name=’sys’
GO
Teraz zmienimy sortowanie tej bazy danych na porównanie bez uwzględniania wielkości liter SQL_Latin1_General_CP1_CI _Jako wykonując poniższe instrukcje T-SQL. Możesz to również zmienić za pomocą GUI, otwierając okno Właściwości bazy danych w SQL Server Management Studio.
--Change database collation to SQL_Latin1_General_CP1_CI_AS
USE master;
GO
Alter DATABASE [MSSQL] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [MSSQL]
COLLATE SQL_Latin1_General_CP1_CI_AS;
GO
Alter DATABASE [MSSQL] SET MULTI_USER
Wykonałem powyższy skrypt za jednym razem, a sortowanie bazy danych zostało pomyślnie zmienione na nowe sortowanie z obsługą bez uwzględniania wielkości liter.
Możesz zweryfikować tę zmianę, uruchamiając poniższe skrypty, aby sprawdzić sortowanie nowo utworzonej bazy danych MSSQL. Widzimy, że nowe sortowanie jest ustawione dla tej bazy danych na poniższym obrazku.
Ponownie uruchomimy tę samą instrukcję T-SQL przed zmianą sortowania, aby zobaczyć wpływ tej zmiany. Jak widzimy teraz, obie instrukcje T-SQL znajdują się w danych wyjściowych.
Wniosek
Mam nadzieję, że oczywiste jest, że zestawienie w SQL Server jest kluczowe. Zdefiniowaliśmy, jaki wpływ ma to, jeśli wprowadzisz zmiany w sortowaniu na dowolnym poziomie w SQL Server. Zawsze należy najpierw odpowiednio zaplanować i przetestować modyfikacje w środowisku o niższym cyklu życia.
Czekajcie na mój następny artykuł, w którym pokażę wam krok po kroku metodę zmiany sortowania na poziomie serwera.
Udostępnij ten artykuł i podziel się swoją opinią, pomoże nam to ulepszyć.