Zmień sortowanie baz danych SQL Server

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:

baza danych nie może być zablokowana wyłącznie w celu wykonania operacji

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:

  1. Ustaw bazę danych na tryb pojedynczego użytkownika;
  2. wykonaj niezbędne zmiany w bazie danych, w tym przypadku zmień sortowanie;
  3. 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:

  1. Eksportuj stare dane z każdej tabeli za pomocą Kreatora importu i eksportu danych SQL Server lub bcp;
  2. upuść i przywróć tabele; oraz
  3. 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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.