Udostępnij za pośrednictwem


Setting and Changing the Column Collation

Można zastąpić sortowanie bazy danych dla char, varchar, text, nchar, nvarchar, a ntext dane, określając inną sortowanie dla danej kolumna tabela, a przy użyciu jednej z następujących czynności:

  • Klauzula COLLATE TWORZENIE tabela and ALTER tabela.Na przykład:

    CREATE TABLE MyTable
      (PrimaryKey   int PRIMARY KEY,
       CharCol      varchar(10) COLLATE French_CI_AS NOT NULL
      )
    GO
    ALTER TABLE MyTable ALTER COLUMN CharCol
                varchar(10)COLLATE Latin1_General_CI_AS NOT NULL
    GO
    
  • SQL Server Management Studio.For more information, see Table Column Properties (SQL Server Management Studio).

  • Za pomocą Column.Collation Właściwość w SQL Server Obiekty zarządzania (obiekty SMO).

Nie można zmienić sortowanie kolumn, które są obecnie wywoływane przez jeden z następujących czynności:

  • kolumna obliczana

  • Indeks

  • Statystyki dystrybucji, generowany automatycznie lub przez instrukcję CREATE STATISTICS

  • Ograniczenie typu CHECK

  • Ograniczenie klucz obcy

Podczas pracy w tempdb, the SORTOWANIE klauzula zawiera database_default opcję, aby określić, że kolumna tabela tymczasowa używa domyślnie sortowania bieżącej baza danych użytkownika dla połączenia, zamiast sortowania z tempdb.

Sortowanie i tekst kolumny

You can insert or update values in a text column whose collation is different from the code page of the default collation of the database.SQL Server implicitly converts the values to the collation of the column.

Sortowanie i tempdb

The tempdb database is built every czas SQL Server is started and has the same default sortowanie as the model database.Zazwyczaj jest taka sama, jak domyślnym sortowaniem wystąpienie.Po utworzeniu bazy danych użytkowników i określ inny domyślny sortowania niż Model, baza danych użytkownika, jest sortowanie innego domyślnego niż tempdb.Utworzone i przechowywane w wszystkie tymczasowych procedur przechowywanych i tabel tymczasowych tempdb.To oznacza, że wszystkie kolumny pośrednie w tabel tymczasowych i wszystkie coercible domyślne stałych, zmiennych i parametrów w tymczasowych procedur przechowywanych metody sortowania różnią się od porównywalnych obiektów utworzonych w tabelach stałe i procedur przechowywanych.

Może to prowadzić do problemów związanych z niezgodnością w sortowaniu między zdefiniowanej przez użytkownika baz danych i obiektów bazy danych systemu.Na przykład wystąpienie SQL Server używa Latin1_General_CS_AS sortowanie i wykonać następujące instrukcje:

CREATE DATABASE TestDB COLLATE Estonian_CS_AS;
USE TestDB;
CREATE TABLE TestPermTab (PrimaryKey int PRIMARY KEY, Col1 nchar );

W tym systemie tempdb ze strona kodowa 1252 i bazy danych korzysta z sortowania Latin1_General_CS_ASTestDB i TestPermTab.Col1 za pomocą Estonian_CS_AS sortowanie ze strona kodowa 1257. Na przykład:

USE TestDB;
GO
-- Create a temporary table with the same column declarations
-- as TestPermTab
CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, Col1 nchar )
INSERT INTO #TestTempTab
         SELECT * FROM TestPermTab
GO

W poprzednim przykładzie tempdb bazy danych używa Latin1_General_CS_AS sortowania i TestDB i TestTab.Col1 za pomocą Estonian_CS_AS sortowanie. Na przykład:

SELECT * FROM TestPermTab a INNER JOIN #TestTempTab on a.Col1 = #TestTempTab.Col1

Ponieważ tempdb używa domyślnego sortowanie serwera i TestPermTab.Col1 zastosowanie różnych sortowania programu SQL Server zwraca ten błąd: "Nie może rozpoznać sortowanie konflikt między"Latin1_General_CI_AS_KS_WS"i Estonian_CS_AS w równych operacji. „

Aby uniknąć błędu, można użyć jednej z następujących możliwości:

  • Pozwala określić, że kolumna tabela tymczasowa nie używał domyślnym sortowaniem baza danych użytkownika tempdb.Umożliwia to tabela tymczasowa Praca z tabelami podobnie sformatowane w wielu baz danych, jeżeli jest to wymagane systemu.

    CREATE TABLE #TestTempTab
       (PrimaryKey int PRIMARY KEY,
        Col1 nchar COLLATE database_default
       )
    
  • Określ poprawny sortowanie dla #TestTempTab kolumna:

    CREATE TABLE #TestTempTab
       (PrimaryKey int PRIMARY KEY,
        Col1 nchar COLLATE Estonian_CS_AS
       )