může přijít čas, kdy budete muset změnit databázi, abyste mohli použít jiné řazení.
můžete to provést pomocí následujícího úryvku:
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
při spuštění výše uvedeného úryvku můžete narazit na následující chybu:
k této chybě dochází, když je vaše databáze v režimu pro více uživatelů nebo pokud existují objekty odkazující na vaši databázi.
Chcete-li tuto chybu překonat, musíte provést následující kroky:
- nastavte databázi do režimu pro jednoho uživatele;
- proveďte potřebné změny v databázi, v tomto případě řazení změn;
- nastavte databázi zpět do režimu pro více uživatelů.
výše uvedený úryvek lze tedy aktualizovat na následující:
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
výše uvedený proces lze použít, pokud jste právě vytvořili novou databázi bez dat uvnitř, aniž byste nastavili požadované seskupení databáze.
změňte řazení na sloupce tabulky
ve vaší databázi mohou být sloupce tabulky s různým porovnáním, jmenovitě sloupce tabulky typů char, varchar, text, nchar, nvarchar a ntext. Chcete-li zobrazit všechny sloupce tabulky s jejich aktuálními kategoriemi, můžete spustit následující dotaz:
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
před provedením jakýchkoli změn v sestavách těchto sloupců je třeba zkontrolovat, zda změny způsobí problémy aplikacím.
Chcete-li změnit řazení sloupců na nový, můžete spustit následující dotaz:
ALTER TABLE ALTER COLUMN <ColumnType> COLLATE <NewCollation>
v případě chyby se ujistěte, že odkazující omezení a indexy jsou zrušeny; můžete je znovu vytvořit po změně řazení.
Změna řazení a existujících dat
a co vaše stávající data? Abyste se ujistili, že stávající data jsou po změně řazení dostupná, musíte postupovat podle níže uvedených kroků:
- export starých dat z každé tabulky, a to buď pomocí SQL Server Import a Export dat Průvodce nebo bcp;
- drop a znovu tabulky; a
- import dříve exportovaných dat.
v následujícím příkladu vytvoříme databázi s kolací LATIN1_GENERAL_CI_AI, přidáme tabulku produkty s názvem sloupce (nvarchar (50)) a vložíme některá data v řečtině.
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');
při pohledu na všechny produkty začínající na „προςν“ (řecké slovo pro produkt) získáme 5 výsledků:
SELECT *FROM dbo.ProductsWHERE Name LIKE N'Προϊόν%';-- Results:Name--------------------------------------------------Προϊόν 1Προϊόν 2Προϊόν 3Προϊόν 4Προϊόν 5
Krok 1. Export dat
pojďme exportovat data v tabulce produktů pomocí bcp, což je zkratka pro bulk copy program utility (bcp) a hromadné kopie dat mezi instancí Microsoft SQL Server a datový soubor v uživatelem zadaném formátu. Tento nástroj může být použit k importu velkého počtu nových řádků do tabulek SQL Server nebo exportovat data z tabulek do souboru adata. K tomu potřebujeme následující příkaz:
bcp CollationTest.dbo.Products out Products.txt -c -T
kde -c
provádí operaci pomocí znakového datového typu a -T
určuje, že nástroj bcp se připojí k serveru SQL s důvěryhodným připojením pomocí integrovaného zabezpečení.
Krok 2. Změna řazení databáze
v dalším kroku změníme řazení databáze na GREEK_CI_AI s následujícím příkazem:
-- Alter database collationALTER DATABASE COLLATE GREEK_CI_AI;
Krok 3. Zrušte a znovu vytvořte tabulku produktů
USE GODROP TABLE .;GOCREATE TABLE .( (50) NULL) ON GO
Krok 4. Import dříve exportovaných dat
k tomu použijeme znovu nástroj bcp, ale místo parametru out
použijeme parametr in
:
bcp CollationTest.dbo.Products in Products.txt -c -T