ändra SQL Server databas sortering

en tid kan komma när du kommer att behöva ändra din databas för att använda en annan sortering.

du kan göra detta genom att använda följande utdrag:

USE master;GOALTER DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS ;GO--Verify the collation setting.SELECT name, collation_nameFROM sys.databasesWHERE name = N'';GO

när du kör ovanstående utdrag kan du stöta på följande fel:

databasen kunde inte vara uteslutande låst för att utföra åtgärden

det här felet uppstår när din databas är i fleranvändarläge eller när det finns objekt som hänvisar till din databas.

för att övervinna detta fel måste du utföra följande steg:

  1. Ställ in databasen till enanvändarläge;
  2. utför nödvändiga ändringar i din databas, i detta fall ändra sortering;
  3. Ställ in databasen tillbaka till fleranvändarläge.

så kan ovanstående utdrag uppdateras till följande:

USE master;GO-- Set to single-user modeALTER DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATEGO -- change collationALTER DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS; GO -- Set to multi-user modeALTER DATABASE SET MULTI_USER WITH ROLLBACK IMMEDIATE;GO --Verify the collation setting. SELECT name, collation_name FROM sys.databases WHERE name = N'MyOptionsTest'; GO

ovanstående process kan användas om du just har skapat en ny databas, utan data inuti, utan att ställa in önskad databas sortering.

ändra sortering till tabellkolumner

i din databas kan det finnas tabellkolumner med olika sortering, nämligen tabellkolumner av typerna char, varchar, text, nchar, nvarchar och ntext. Om du vill lista alla tabellkolumner med deras aktuella sorteringar kan du köra följande fråga:

SELECT t.name, c.name, c.collation_nameFROM sys.columns c INNER JOIN sys.tables t ON t.object_id = c.object_idWHERE c.object_id IN (SELECT object_id FROM sys.objects WHERE type = 'U') AND c.collation_name != 'NULL'ORDER BY t.name, c.name

innan du gör några ändringar i dessa kolumners sorteringar måste du kontrollera om ändringarna kommer att generera några problem för applikationerna.

om du vill ändra en kolumnsortering till en ny kan du köra följande fråga:

ALTER TABLE ALTER COLUMN <ColumnType> COLLATE <NewCollation>

i händelse av ett fel, se till att referensbegränsningarna och indexerna tappas.du kan återskapa dem efter att sorteringen har ändrats.

ändra sortering och befintliga Data

vad sägs om dina befintliga data? För att vara säker på att befintliga data kan hämtas efter byte av sortering måste du följa stegen nedan:

  1. exportera gamla data från varje tabell, antingen med SQL Server Import och Export data wizard eller bcp;
  2. släpp och återskapa tabellerna; och
  3. importera tidigare exporterade data.

i följande exempel kommer vi att skapa en databas med sortering LATIN1_GENERAL_CI_AI, lägga till en tabell produkter med ett kolumnnamn (nvarchar(50)) och infoga vissa data på grekiska.

CREATE DATABASE COLLATE LATIN1_GENERAL_CI_AI;-- -- Create Products table and add some dataUSE GOCREATE TABLE .( (50) NULL) ON GOinsert into dbo.Products (name) values (N'Προϊόν 1');insert into dbo.Products (name) values (N'Προϊόν 2');insert into dbo.Products (name) values (N'Προϊόν 3');insert into dbo.Products (name) values (N'Προϊόν 4');insert into dbo.Products (name) values (N'Προϊόν 5');

om du letar efter alla produkter som börjar med” S ” (grekiskt ord för produkt) får vi 5 resultat:

SELECT *FROM dbo.ProductsWHERE Name LIKE N'Προϊόν%';-- Results:Name--------------------------------------------------Προϊόν 1Προϊόν 2Προϊόν 3Προϊόν 4Προϊόν 5

Steg 1. Exportera Data

Låt oss exportera data i produkter tabell med bcp, som står för bulk copy program utility (bcp) och bulk kopierar data mellan en instans av Microsoft SQL Server och en datafil i ett användardefinierat format. Detta verktyg kan användas för att importera ett stort antal nya rader i SQL Server-tabeller eller exportera data från tabeller till adata-fil. För att göra det behöver vi följande kommando:

bcp CollationTest.dbo.Products out Products.txt -c -T

där -c utför åtgärden med en teckendatatyp och -T anger att BCP-verktyget ansluter till SQL Server med en betrodd anslutning med integrerad säkerhet.

steg 2. Ändra databas sortering

i nästa steg kommer vi att ändra databas sortering till GREEK_CI_AI, med följande uttalande:

-- Alter database collationALTER DATABASE COLLATE GREEK_CI_AI;

steg 3. Släpp och återskapa tabellen Produkter

USE GODROP TABLE .;GOCREATE TABLE .( (50) NULL) ON GO

steg 4. Importera tidigare exporterade data

för att göra det kommer vi att använda igen BCP-verktyget men istället för parametern out använder vi parametern in :

bcp CollationTest.dbo.Products in Products.txt -c -T

Lämna ett svar

Din e-postadress kommer inte publiceras.