der kan komme et tidspunkt, hvor du bliver nødt til at ændre din database for at bruge en anden samling.
du kan gøre dette ved at bruge følgende uddrag:
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 udfører ovenstående uddrag, kan du støde på følgende fejl:
denne fejl opstår, når databasen er i flerbrugertilstand, eller når der er objekter, der henviser til din database.
for at overvinde denne fejl skal du udføre følgende trin:
- Indstil databasen til enkeltbrugertilstand;
- udfør de nødvendige ændringer i din database, i dette tilfælde skift sortering;
- Indstil databasen tilbage til flerbrugertilstand.
så ovenstående uddrag kan opdateres til følgende:
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
ovenstående proces kan bruges, hvis du lige har oprettet en ny database uden data inde uden at indstille den ønskede databasesamling.
Skift sortering til tabelkolonner
i din database kan der være tabelkolonner med forskellig sortering, nemlig tabelkolonner af typerne char, varchar, tekst, nchar, nvarchar og nteksttekst. Hvis du vil liste alle tabelkolonner med deres aktuelle sorteringer, kan du køre følgende forespørgsel:
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
før du foretager ændringer i disse kolonners samlinger, skal du kontrollere, om ændringerne vil generere problemer for applikationerne.
hvis du vil ændre en kolonnesamling til en ny, kan du køre følgende forespørgsel:
ALTER TABLE ALTER COLUMN <ColumnType> COLLATE <NewCollation>
i tilfælde af en fejl skal du sørge for, at referencebegrænsningerne og indekserne slettes; du kan genskabe dem, efter at sorteringen er blevet ændret.
ændring af sortering og eksisterende Data
hvad med dine eksisterende data? For at være sikker på, at eksisterende data kan hentes efter ændring af sortering, skal du følge nedenstående trin:
- Eksporter gamle data fra hver tabel, enten ved hjælp af guiden Import og eksport af data eller BCP;
- slip og genskab tabellerne; og
- Importer tidligere eksporterede data.
i det følgende eksempel opretter vi en database med sortering LATIN1_GENERAL_CI_AI, Tilføj en tabel produkter med et kolonnenavn (nvarchar(50)) og indsæt nogle data på græsk.
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');
Leder du efter alle produkter, der starter med” prisT ” (græsk ord for produkt), får vi 5 resultater:
SELECT *FROM dbo.ProductsWHERE Name LIKE N'Προϊόν%';-- Results:Name--------------------------------------------------Προϊόν 1Προϊόν 2Προϊόν 3Προϊόν 4Προϊόν 5
Trin 1. Eksporter Data
lad os eksportere data i Produkttabellen ved hjælp af BCP, som står for bulk copy program utility (BCP) og bulk kopierer data mellem en forekomst af Microsoft server og en datafil i et brugerdefineret format. Dette værktøj kan bruges til at importere et stort antal nye rækker i Server tabeller eller til at eksportere data ud af tabeller i adata-fil. For at gøre det har vi brug for følgende kommando:
bcp CollationTest.dbo.Products out Products.txt -c -T
hvor -c
udfører handlingen ved hjælp af en tegndatatype og -T
angiver, at BCP-hjælpeprogrammet opretter forbindelse til en betroet forbindelse ved hjælp af integreret sikkerhed.
Trin 2. Skift Databasesamling
i det næste trin ændrer vi databasesamling til GREEK_CI_AI med følgende erklæring:
-- Alter database collationALTER DATABASE COLLATE GREEK_CI_AI;
Trin 3. Slip og genskab tabellen produkter
USE GODROP TABLE .;GOCREATE TABLE .( (50) NULL) ON GO
Trin 4. Importer tidligere eksporterede data
for at gøre det bruger vi igen BCP-værktøjet, men i stedet for parameteren out
bruger vi parameteren in
:
bcp CollationTest.dbo.Products in Products.txt -c -T