Установка и изменение параметров сортировки столбцов
Для типов данных char, varchar, text, nchar, nvarchar и ntext параметры сортировки базы данных можно переопределить, указав его для определенного столбца таблицы одним из следующих способов:
Предложением COLLATE в инструкциях CREATE TABLE и ALTER TABLE. Например:
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. Дополнительные сведения см. в разделе Свойства столбца таблицы (среда SQL Server Management Studio).
С помощью свойства column.collation объектов SQL Server Management Objects (SMO).
Невозможно изменить параметры сортировки столбца, на который ссылаются:
- вычисляемый столбец;
- индекс;
- статистика распределения, созданная автоматически либо с помощью инструкции CREATE STATISTICS;
- ограничение CHECK;
- ограничение FOREIGN KEY.
При работе с базой данных tempdb предложение COLLATE содержит параметр database_default, указывающий, что столбец, находящийся во временной таблице, использует параметры сортировки по умолчанию для текущей базы данных пользователя для соединения, а не базы данных tempdb.
Параметры сортировки и столбцы типа text
В столбце типа text могут добавляться или изменяться значения, имеющие параметры сортировки, отличные от кодовой страницы параметров сортировки по умолчанию для базы данных. SQL Server неявно преобразует значения параметров сортировки столбца.
Параметры сортировки и база данных tempdb
База данных tempdb создается каждый раз при запуске SQL Server и имеет те же параметры сортировки по умолчанию, что и база данных model. Обычно они совпадают с параметрами сортировки экземпляра. Если при создании пользовательской базы данных указываются параметры сортировки, отличные от параметров сортировки базы данных model, то параметры сортировки пользовательской базы данных будут отличаться от базы данных tempdb. Все временные хранимые процедуры и временные таблицы создаются и сохраняются в базе данных tempdb. Это означает, что неявно столбцы временных таблиц и все константы, переменные и параметры хранимых процедур имеют параметры сортировки, отличные от сравниваемых объектов, создаваемых в постоянных таблицах и хранимых процедурах.
Это может привести к проблемам из-за различия параметров сортировки у объектов в пользовательских и системных базах данных. Например, экземпляр SQL Server 2005 использует параметры сортировки Latin1_General_CS_AS, и выполняется следующая инструкция:
CREATE DATABASE TestDB COLLATE Estonian_CS_AS;
USE TestDB;
CREATE TABLE TestPermTab (PrimaryKey int PRIMARY KEY, Col1 nchar );
В рассматриваемой системе база данных tempdb использует параметры сортировки Latin1_General_CS_AS с кодовой страницей 1252, а база данных TestDB
и столбец TestPermTab.Col1
— параметры сортировки Estonian_CS_AS
с кодовой страницей 1257. Например:
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
Согласно предыдущему примеру, база данных tempdb использует параметры сортировки Latin1_General_CS_AS, а база данных TestDB
и столбец TestTab.Col1
параметры сортировки Estonian_CS_AS
. Например:
SELECT * FROM TestPermTab a INNER JOIN #TestTempTab on a.Col1 = #TestTempTab.Col1
Поскольку база данных tempdb использует параметры сортировки сервера по умолчанию, а столбец TestPermTab.Col1
— другие параметры сортировки, SQL Server возвратит следующую ошибку: «Невозможно разрешить конфликт параметров сортировки между 'Latin1_General_CI_AS_KS_WS' и 'Estonian_CS_AS' в операции равенства».
Избавиться от этой ошибки можно одним из следующих способов:
укажите, что столбец временной таблицы использует параметры сортировки по умолчанию пользовательской базы данных, а не базы данных tempdb. Это позволит таблице работать с аналогичными таблицами в разных базах данных, если это необходимо;
CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, Col1 nchar COLLATE database_default )
укажите правильные параметры сортировки в столбце
#TestTempTab
:CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, Col1 nchar COLLATE Estonian_CS_AS )
См. также
Основные понятия
Настройка и изменение параметров сортировки сервера
Настройка и изменение параметров сортировки базы данных
Установка параметров сортировки выражений
Параметры сортировки идентификаторов