Change SQL Server Database Collation

eljön az idő, amikor meg kell változtatni az adatbázist, hogy egy másik egybevetés.

ezt a következő kódrészlettel teheti meg:

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

a fenti kódrészlet végrehajtásakor a következő hibával találkozhat:

az adatbázist nem lehetett kizárólag zárolni a művelet végrehajtásához

ez a hiba akkor fordul elő, ha az adatbázis többfelhasználós módban van, vagy ha az adatbázisra utaló objektumok vannak.

a hiba leküzdéséhez a következő lépéseket kell végrehajtania:

  1. állítsa az adatbázist egyfelhasználós módba;
  2. végezze el az adatbázis szükséges módosításait, ebben az esetben változtassa meg a leválogatást;
  3. állítsa vissza az adatbázist többfelhasználós módba.

tehát a fenti részlet frissíthető a következőre:

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

a fenti folyamat akkor használható, ha éppen létrehozott egy új adatbázist, benne nincs adat, a kívánt adatbázis-összeállítás beállítása nélkül.

változtassa meg az összevonást Táblázatoszlopokra

az adatbázisban lehetnek különböző összevonású Táblázatoszlopok, nevezetesen char, varchar, text, nchar, nvarchar és ntext típusú Táblázatoszlopok. Ha az összes táblázatoszlopot az aktuális összevetésükkel szeretné felsorolni, a következő lekérdezést futtathatja:

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

mielőtt módosítaná ezeket az oszlopokat, ellenőriznie kell, hogy a módosítások problémákat okoznak-e az alkalmazásokban.

ha egy oszloprendezést újra szeretne változtatni, a következő lekérdezést futtathatja:

ALTER TABLE ALTER COLUMN <ColumnType> COLLATE <NewCollation>

hiba esetén győződjön meg arról, hogy a hivatkozási korlátok és indexek el vannak ejtve; újra létrehozhatja azokat az egyezés megváltoztatása után.

az összevetés és a meglévő adatok módosítása

mi a helyzet a meglévő adatokkal? Annak érdekében, hogy a meglévő adatok visszakereshetők legyenek az összevetés megváltoztatása után, kövesse az alábbi lépéseket:

  1. exportálja a régi adatokat az egyes táblákból az SQL Server Importálás és exportálás varázsló vagy a bcp használatával;
  2. dobja el és hozza létre újra a táblákat; és
  3. importálja a korábban exportált adatokat.

a következő példában létrehozunk egy adatbázist a latin1_general_ci_ai összevonással, hozzáadunk egy táblázatot termékek oszlopnévvel (nvarchar(50)), és beillesztünk néhány adatot görögül.

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

keresi az összes termék kezdve” Enterprises ” (görög szó a termék), megkapjuk 5 eredmények:

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

1. lépés. Adatok exportálása

exportáljuk az adatokat a termékek táblában a BCP használatával, amely a tömeges másolási program segédprogramot (BCP) jelenti, és a Microsoft SQL Server egy példánya és egy felhasználó által megadott formátumú adatfájl között tömeges másolást végez. Ez a segédprogram nagy számú új sor importálására használható az SQL Server táblákba, vagy adatok exportálására a táblákból az adata fájlba. Ehhez a következő parancsra van szükségünk:

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

ahol a -c karakter adattípussal hajtja végre a műveletet, a -T pedig azt adja meg, hogy a bcp segédprogram integrált biztonságot használó megbízható kapcsolattal csatlakozzon az SQL Serverhez.

2. lépés. Adatbázis-leválogatás módosítása

a következő lépésben az adatbázis-leválogatást GÖRÖG_CI_AI-ra változtatjuk, a következő utasítással:

-- Alter database collationALTER DATABASE COLLATE GREEK_CI_AI;

3. lépés. Dobja el és hozza létre újra a termékek táblázatot

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

4.lépés. Korábban exportált adatok importálása

ehhez ismét a bcp segédprogramot fogjuk használni, de a out paraméter helyett a in paramétert fogjuk használni:

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

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.