Change SQL Server Database Collation

a time may come when you will need to alter your database to use a different collation.

voit tehdä tämän käyttämällä seuraavaa pätkää:

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

kun suoritat yllä olevaa pätkää, Saatat törmätä seuraavaan virheeseen:

tietokantaa ei voitu lukita yksinomaan toiminnon

suorittamiseksi tämä virhe tapahtuu, kun tietokantasi on usean käyttäjän tilassa tai kun on olemassa tietokantaasi viittaavia esineitä.

tämän virheen voittamiseksi sinun on suoritettava seuraavat vaiheet:

  1. Aseta tietokanta yhden käyttäjän tilaan;
  2. tee tarvittavat muutokset tietokantaan, tässä tapauksessa muuta vertailua;
  3. Aseta tietokanta takaisin monen käyttäjän tilaan.

joten yllä oleva pätkä voidaan päivittää seuraavaan:

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

yllä olevaa prosessia voidaan käyttää, jos olet juuri luonut uuden tietokannan, jossa ei ole tietoja sisällä, asettamatta haluttua tietokantakokoelmaa.

muuta vertailua taulukon sarakkeiksi

tietokannassasi voi olla taulukkosarakkeita, joilla on erilainen kokoelma, eli taulukkosarakkeita tyypeistä char, varchar, text, nchar, nvarchar ja ntext. Listataksesi kaikki taulukon sarakkeet nykyisine collointeineen, voit suorittaa seuraavan kyselyn:

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

ennen kuin teet muutoksia näiden sarakkeiden collointeihin, sinun on tarkistettava, aiheuttavatko muutokset ongelmia sovelluksille.

jos haluat muuttaa sarakekokoelman uudeksi, voit suorittaa seuraavan kyselyn:

ALTER TABLE ALTER COLUMN <ColumnType> COLLATE <NewCollation>

virheen sattuessa varmista, että viittausrajoitukset ja indeksit pudotetaan; voit luoda ne uudelleen sen jälkeen, kun vertailua on muutettu.

Muutoskooste ja olemassa olevat tiedot

entä olemassa olevat tietosi? Jotta olla varma, että olemassa olevat tiedot on noudettavissa muutettuaan vertailua, sinun täytyy noudattaa ohjeita:

  1. vie vanhat tiedot kustakin taulukosta joko käyttämällä SQL Server Import and Export data wizard tai bcp;
  2. pudota ja luo taulukot; ja
  3. tuo aiemmin vietyjä tietoja.

seuraavassa esimerkissä luodaan tietokanta vertailulla LATIN1_GENERAL_CI_AI, lisätään taulukon tuotteet sarakenimellä (nvarchar (50)) ja lisätään joitakin tietoja kreikaksi.

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

Etsi kaikki tuotteet Alkaen” Προϊόν ” (kreikan sana tuotteelle), saamme 5 tulosta:

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

Vaihe 1. Vie tiedot

viedään tiedot Tuotetaulukossa käyttäen bcp: tä, joka tulee sanoista bulk copy program utility (BCP) ja bulk copies data Microsoft SQL Serverin ja datatiedoston välillä käyttäjän määrittämässä muodossa. Tätä apuohjelmaa voidaan käyttää tuomaan suuria määriä uusia rivejä SQL Server-taulukoihin tai viemään tietoja taulukoista adata-tiedostoon. Tätä varten tarvitsemme seuraavan komennon:

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

jossa -c suorittaa toiminnon käyttämällä merkkitietotyyppiä ja -T määrittää, että BCP-apuohjelma muodostaa yhteyden SQL Serveriin, jossa on luotettu yhteys integroitua suojausta käyttäen.

Vaihe 2. Muuta Tietokantakoostumusta

seuraavassa vaiheessa muutamme tietokantakoostumuksen muotoon GREEK_CI_AI, seuraavalla lauseella:

-- Alter database collationALTER DATABASE COLLATE GREEK_CI_AI;

Vaihe 3. Pudota ja luo tuotteet taulukko

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

Vaihe 4. Tuo aiemmin vietyjä tietoja

tehdäksemme niin käytämme jälleen BCP-apuohjelmaa, mutta out – parametrin sijaan käytämme in – parametria:

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

Vastaa

Sähköpostiosoitettasi ei julkaista.