januari 28, 2022

{coding}syn

när du utvecklar ett program eller skriva en kod i SQL-databassystemet, är det viktigt att förstå hur data kommer att sorteras och jämföras. Du kan lagra dina data på ett visst språk, eller så kanske du vill att SQL Server ska behandla skiftlägeskänsliga och skiftlägeskänsliga data separat. Microsoft har tillhandahållit en SQL Server-inställning som kallas sortering för att kontrollera och hantera sådana krav.

Vad är sortering i SQL Server?

vi kan ställa in sorteringen på olika nivåer i SQL Server enligt nedan.

  • servernivå
  • databasnivå
  • kolumnnivå
  • Uttrycksnivå

servernivå sortering kan ibland kallas SQL Server instans nivå sortering.

sorteringen av databasnivå ärvs från inställningen för sortering av servernivå om du inte väljer någon specifik sortering under skapandet av databasen. Du kan också ändra sorteringen på databasnivå senare. Observera att ändring av Databas sortering kommer att tillämpas för endast kommande eller nya objekt som kommer att skapas efter sorteringsändringen.

Ny sortering ändrar inte befintliga data lagrade i tabeller som sorterades med den senaste sorteringstypen. Applikationsteamet behöver ytterligare planering för att hantera denna lagrade datakonvertering på grund av den nya sorteringsinställningen.

det finns flera sätt att göra det. En är att kopiera data från den befintliga tabellen till en ny tabell som skapats med den nya sorteringen och sedan ersätta den gamla tabellen med den nya. Du kan också flytta tabelldata till en ny databas genom att ha en ny sortering och ersätta den gamla databasen med den nya.

OBS: ändra sortering är en komplex uppgift och du bör undvika det om du inte har en obligatorisk business case.

Hur hittar och ändrar databas sortering i SQL Server?

Låt oss gå vidare och kontrollera sorteringen av SQL Server-instans och alla databaser som är värd för den instansen. Du kan kontrollera sortering genom att öppna fönstret databas-eller instansnivåegenskaper med SQL Server Management Studio eller genom att helt enkelt köra nedanstående T-SQL-sats. Sorteringen för varje databas lagras i systemobjektet sys.databaser-vi kommer åt den för att få den här informationen.

--Check Database CollationSELECT name, collation_name FROM sys.databases GO --Check Server or Instance level CollationSELECT SERVERPROPERTY('Collation') As 

jag har exekverat ovanstående T-SQL-uttalande och fått nedanstående utgång. Vi kan se att alla databaser och sortering på servernivå har samma inställningar som SQL_Latin1_General_CP1_CI_AS. Det betyder att databassorteringar har ärvts av sorteringen på servernivå när de skapades, och standardvärdet har inte ändrats.

utmatning av T-SQL-satsen exekvering

låt mig nu visa dig hur du kontrollerar databasens sortering med GUI i SQL Server Management Studio.

Anslut först till din SQL Server-instans med SQL Server Management Studio. Expandera instansnoden följt av mappen databaser. Högerklicka på måldatabasen och välj Egenskaper:

välj Egenskaper i måldatabasen

du får fönstret nedan Databasegenskaper.

Klicka nu på fliken Alternativ från den vänstra panelen. Du kommer att få flera egenskaper inställningar i den högra panelen. Sortering är den första egenskapen på den här sidan – du kan se att den är densamma som den var i ovanstående T-SQL-skript.

på samma sätt kan du klicka på SQL Server-instansnoden och högerklicka på instansnivåegenskaperna för att se sorteringen på servernivå.

sortering på servernivå

om du vill ändra denna sortering till en ny sortering behöver du bara klicka på rullgardinsmenyn sortering och välja det alternativ du behöver. Se till att du har gjort en fullständig säkerhetskopia av din databas innan du gör det.

ändra sorteringen till en ny

jag har valt en liknande sortering med skiftlägeskänsliga SQL_Latin1_General_CP1_CS_AS för den här databasen och klickade på OK för att tillämpa den. Observera: Se till att ingen är ansluten till måldatabasen under den här proceduren, annars måste du byta läge till en användare och ändra den här konfigurationen.

Databasegenskaper

du kan också ändra denna databas sortering med hjälp av T-SQL-satsen. För det, använd COLLATE-klausulen i Alter DATABASE-uttalandet.

först har vi bytt databasen till enanvändarläge, sedan ändrat sorteringen och slutligen flyttat databasen till fleranvändarläget.

--Change Database Collation using T-SQL USE master; GO Alter DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS; GOAlter DATABASE SET MULTI_USER

lista ut alla stödda sorteringar i SQL Server

det här avsnittet visar hur du hittar alla tillgängliga sorteringar i SQL Server. Låt mig först visa dig hur du får listan över alla stödda sorteringar för SQL Server-instansen.

SQL Server har en systemfunktion som heter fn_helpcollations () som du kan använda för att hämta alla sorteringar.

Kör kommandot nedan för att visa listan.

--Display the list of all collations SELECT name, description FROM fn_helpcollations()

vi kan se alla 5508-stödda sorteringar i utdatasektionen. Om du inte är säker på vilken sortering du ska välja kan du använda where-satsen i nedanstående skript för att filtrera bort alla möjliga sorteringar som kan ställas in i databasen.

alla stödda sorteringar

låt oss säga att du måste lagra dina data på det amerikanska engelska språket och vill att SQL Server ska hantera det i ett skiftlägeskänsligt format. Du kan använda kommandot nedan för att hämta listan över möjliga och stödda sorteringar för din fråga:

--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%'

utgången visar bara 10 sorteringar som uppfyller din fråga. Du kan använda ovanstående skript för att filtrera bort olika sorteringar.

filtrera sorteringarna

inverkan av att ändra databas sortering på Frågeutgång

i det här avsnittet kommer jag att visa dig skillnaden mellan de två utgångarna i samma fråga när de körs med olika sorteringar.

först skapar jag en databas med namnet MSSQL med en sortering (SQL_Latin1_General_CP1_CS_AS). Då kommer jag att köra samma fråga två gånger för att få utmatningen. Senare kommer jag att ändra sorteringen till SQL_Latin1_General_CP1_CI_AS och igen köra samma frågor för att få sin produktion. Du kan jämföra båda utgångarna och förstå effekterna av att ändra en databas sortering. Så, låt oss börja med att skapa databas.

starta det nya fönstret för databasskapande som visas i bilden nedan. Du kan också skapa den här databasen med T-SQL. Därefter kan du se databasnamnet och dess datafiler. Klicka nu på den andra fliken på den vänstra panelen för att växla till sorteringsegenskapsfönstret.

starta ett nytt fönster för att skapa databaser

du kan se att sorteringsnamnet för den här databasen är standard. Det betyder att den här databasen kommer att ärva sortering från sorteringstypen på servernivå. Klicka på rullgardinsmenyn sortering för att välja din nya sortering.

välja ny sortering

jag har valt nedanstående sortering SQL_Latin1_General_CP1_CS_AS för denna databas – inte standard. Klicka på OK för att fortsätta med skapandet av databasen.

välja ny sortering

nu, kontrollera databas sortering för en nyskapad databas. Vi kan se att det är SQL_Latin1_General_CP1_CS_AS som vi har valt i föregående steg.

kontrollera databas sortering för nyskapade databas

i SQL_Latin1_General_CP1_CS_AS står CS för skiftlägeskänsligt läge och CI står för skiftlägeskänsligt läge. Nu kan du köra antingen nedanstående T-SQL-kod eller någon kod för att få utmatningen.

jag har kört samma kommando två gånger. Det första skriptet filtrerar kolumnnamnen med ett värde SYS med stora bokstäver, medan det andra skriptet filtrerar samma kolumn med samma värde sys med små bokstäver. Avsnittet output visar att det första skriptet inte har visat någon utdata, medan det andra skriptet har visat utdata på grund av dess skiftlägeskänsliga beteende.

Select * from sysusersWhere name='SYS'GoSelect * from sysusersWhere name='sys'GO
inverkan av att ändra databas sortering på frågan utgång

nu kommer vi att ändra sorteringen av denna databas till den skiftlägeskänsliga sorteringen SQL_Latin1_General_CP1_CI_AS genom att utföra nedanstående T-SQL-satser. Du kan också ändra det via GUI genom att öppna fönstret Databasegenskaper i SQL Server Management Studio.

--Change database collation to SQL_Latin1_General_CP1_CI_ASUSE master; GO Alter DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS; GOAlter DATABASE SET MULTI_USER

jag har exekverat ovanstående skript i ett skott, och databasens sortering ändrades framgångsrikt till en ny sortering med skiftlägeskänsligt stöd.

ny sortering med skiftlägeskänsligt stöd

du kan verifiera denna ändring genom att köra nedanstående skript för att kontrollera sorteringen av den nyskapade databasen MSSQL. Vi kan se att den nya sorteringen är inställd för den här databasen i bilden nedan.

ny sortering är inställd för databasen

vi kommer igen att köra samma T-SQL-sats innan vi ändrar sorteringen för att se effekten av denna förändring. Som vi kan se nu finns båda T-SQL-satserna i utgången.

inverkan av att ändra databas sortering på frågan utgång

slutsats

jag hoppas att det är uppenbart att sorteringen i SQL Server är avgörande. Vi har definierat vilken inverkan det lämnar om du gör ändringar i sortering på någon nivå i SQL Server. Gör alltid korrekt planering och testa ändringarna i din lägre livscykelmiljö först.

Håll dig uppdaterad för min nästa artikel, där jag kommer att visa dig en steg-för-steg-metod för att ändra sortering på servernivå.

Lämna ett svar

Din e-postadress kommer inte publiceras.