Change SQL Server Database Collation

er kan een tijd komen dat u uw database moet wijzigen om een andere collation te gebruiken.

u kunt dit doen met het volgende fragment:

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

wanneer u het bovenstaande fragment uitvoert, kunt u de volgende fout tegenkomen:

de database kon niet uitsluitend worden vergrendeld om de bewerking uit te voeren

deze fout treedt op wanneer uw database in Multi-User modus staat of wanneer er objecten zijn die naar uw database verwijzen.

om deze fout te verhelpen, moet u de volgende stappen uitvoeren:

  1. stel de database in op single-user modus;
  2. Voer de noodzakelijke wijzigingen in uw database uit, in dit geval verander de collatie;
  3. Stel de database terug in multi-user modus.

het bovenstaande fragment kan dus worden bijgewerkt naar het volgende fragment:

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

het bovenstaande proces kan worden gebruikt als u net een nieuwe database hebt aangemaakt, zonder dat er gegevens in zitten, zonder de gewenste database collation in te stellen.

Wijzig de collatie naar tabelkolommen

in uw database kunnen tabelkolommen met verschillende collatie zijn, namelijk tabelkolommen van de typen char, varchar, text, nchar, nvarchar en ntext. Als u alle tabelkolommen met hun huidige collaties wilt weergeven, kunt u de volgende query uitvoeren:

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

voordat u wijzigingen aanbrengt in de collaties van deze kolommen, moet u controleren of de wijzigingen problemen met de toepassingen zullen genereren.

om een kolomverzameling te wijzigen in een nieuwe, kunt u de volgende query uitvoeren:

ALTER TABLE ALTER COLUMN <ColumnType> COLLATE <NewCollation>

in het geval van een fout, zorg ervoor dat de referencing beperkingen en indexen worden geschrapt; u kunt deze opnieuw maken nadat de collatie is gewijzigd.

vergelijking en bestaande gegevens wijzigen

hoe zit het met uw bestaande gegevens? Om er zeker van te zijn dat bestaande gegevens kunnen worden opgehaald na het wijzigen van de collatie, moet u de onderstaande stappen volgen:

  1. exporteer oude gegevens uit elke tabel, met behulp van de wizard Gegevens importeren en exporteren van SQL Server of bcp;
  2. de tabellen laten vallen en opnieuw aanmaken; en
  3. eerder geëxporteerde gegevens importeren.

in het volgende voorbeeld zullen we een database aanmaken met collation LATIN1_GENERAL_CI_AI, een Tabelproduct toevoegen met een kolomnaam (nvarchar (50)) en enkele gegevens in het Grieks invoegen.

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');

op zoek naar alle producten die beginnen met “Προϊόν” (Grieks woord voor Product), krijgen we 5 Resultaten:

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

Stap 1 Gegevens exporteren

laten we gegevens exporteren in Productentabel met behulp van bcp, wat staat voor bulk copy program utility (BCP) en bulkkopieën gegevens tussen een exemplaar van Microsoft SQL Server en een gegevensbestand in een door de gebruiker opgegeven formaat. Dit hulpprogramma kan worden gebruikt om grote aantallen nieuwe rijen in SQL Server-tabellen te importeren of om gegevens uit tabellen naar adata-bestand te exporteren. Om dit te doen, hebben we het volgende commando nodig:

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

waarbij -c de bewerking uitvoert met behulp van een tekentype en -T specificeert dat het BCP-hulpprogramma verbinding maakt met SQL Server met een vertrouwde verbinding met behulp van geïntegreerde beveiliging.

Stap 2. Wijzig Database Collation

In de volgende stap veranderen we database collation naar GREEK_CI_AI, met het volgende statement:

-- Alter database collationALTER DATABASE COLLATE GREEK_CI_AI;

Stap 3 Drop en maak opnieuw de Productentabel

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

Stap 4. Importeer eerder geëxporteerde gegevens

om dit te doen, gebruiken we opnieuw het BCP-hulpprogramma, maar in plaats van de parameter out gebruiken we de parameter in :

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

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.