może nadejść czas, kiedy będziesz musiał zmienić swoją bazę danych, aby użyć innej sortowania.
możesz to zrobić za pomocą poniższego fragmentu:
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
podczas wykonywania powyższego fragmentu możesz natknąć się na następujący błąd:
ten błąd występuje, gdy baza danych jest w trybie wielu użytkowników lub gdy istnieją obiekty odwołujące się do bazy danych.
aby rozwiązać ten błąd, musisz wykonać następujące kroki:
- Ustaw bazę danych na tryb pojedynczego użytkownika;
- wykonaj niezbędne zmiany w bazie danych, w tym przypadku zmień sortowanie;
- Ustaw bazę danych z powrotem na tryb wielu użytkowników.
tak więc powyższy fragment można zaktualizować do następującego:
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
powyższy proces może być użyty, jeśli właśnie utworzyłeś nową bazę danych, bez danych w środku, bez ustawiania żądanego zestawiania bazy danych.
Zmień zestawianie na Kolumny tabeli
w Twojej bazie danych mogą znajdować się kolumny tabeli z innym zestawianiem, a mianowicie kolumny tabeli typu char, varchar, text, nchar, nvarchar i ntext. Aby wyświetlić listę wszystkich kolumn tabeli wraz z ich bieżącymi zestawieniami, możesz uruchomić następujące zapytanie:
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
przed dokonaniem jakichkolwiek zmian w zestawieniach tych kolumn należy sprawdzić, czy zmiany będą generować problemy dla aplikacji.
aby zmienić zestawienie kolumn na nowe, możesz uruchomić następujące zapytanie:
ALTER TABLE ALTER COLUMN <ColumnType> COLLATE <NewCollation>
w przypadku błędu upewnij się, że ograniczenia i indeksy odwołań zostały usunięte; możesz je odtworzyć po zmianie zestawienia.
Zmień Zestawienie i istniejące dane
co z istniejącymi danymi? Aby mieć pewność, że istniejące dane można odzyskać po zmianie sortowania, należy wykonać poniższe kroki:
- Eksportuj stare dane z każdej tabeli za pomocą Kreatora importu i eksportu danych SQL Server lub bcp;
- upuść i przywróć tabele; oraz
- Importuj wcześniej wyeksportowane dane.
w poniższym przykładzie utworzymy bazę danych z kolacją LATIN1_GENERAL_CI_AI, dodamy tabelę produkty z nazwą kolumny (nvarchar(50)) i wstawimy niektóre dane w języku greckim.
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');
szukając wszystkich produktów zaczynających się na „Προϊόν” (greckie słowo oznaczające produkt), otrzymujemy 5 wyników:
SELECT *FROM dbo.ProductsWHERE Name LIKE N'Προϊόν%';-- Results:Name--------------------------------------------------Προϊόν 1Προϊόν 2Προϊόν 3Προϊόν 4Προϊόν 5
punkt 1. Eksport danych
wyeksportuj dane w tabeli produktów za pomocą bcp, co oznacza bulk copy program utility (BCP) i masowo kopiuje dane między instancją Microsoft SQL Server a plikiem danych w formacie określonym przez użytkownika. To narzędzie może być używane do importowania dużej liczby nowych wierszy do tabel SQL Server lub do eksportowania danych z tabel do pliku adata. Aby to zrobić, potrzebujemy następującego polecenia:
bcp CollationTest.dbo.Products out Products.txt -c -T
gdzie -c
wykonuje operację przy użyciu typu danych znakowych, a -T
określa, że narzędzie bcp łączy się z serwerem SQL przy użyciu zaufanego połączenia przy użyciu zintegrowanych zabezpieczeń.
Krok 2. Zmień sortowanie baz danych
w następnym kroku zmienimy sortowanie baz danych na GREEK_CI_AI, używając następującego polecenia:
-- Alter database collationALTER DATABASE COLLATE GREEK_CI_AI;
Punkt 3. Upuść i odtwórz tabelę produktów
USE GODROP TABLE .;GOCREATE TABLE .( (50) NULL) ON GO
Krok 4. Importuj wcześniej wyeksportowane dane
aby to zrobić, użyjemy ponownie narzędzia bcp, ale zamiast parametru out
użyjemy parametru in
:
bcp CollationTest.dbo.Products in Products.txt -c -T