Копирование данных между различными параметрами сортировки

В Microsoft SQL Server данные можно без потерь перемещать между столбцами в Юникоде, при этом преобразование не требуется. Тем не менее, при перемещении данных между символьными столбцами не в Юникоде, требуется выполнить преобразование из исходной в целевую кодовую страницу. Кодовая страница — это упорядоченный набор символов данного скрипта, с каждым из которых связан числовой индекс или значение элемента кода. Кодовые страницы поддерживают наборы символов и раскладки клавиатуры, используемые различными локалями Microsoft Windows. Поддерживаемые кодовые страницы перечислены в разделе Архитектура кодовых страниц.

По умолчанию символьные данные преобразуются следующим образом:

Операция

Символьные данные преобразуются в:

Экспорт

Символы кодовой страницы OEM

Импорт

символы кодовой страницы ANSI/Microsoft Windows

Преобразование между кодовыми страницами OEM и ANSI приводит к потере символов расширенного или двухбайтового набора символов (DBCS). Чтобы избежать таких преобразований в SQL Server, можно указать кодовую страницу или параметры сортировки.

ПримечаниеПримечание

Дополнительные сведения о смене параметров сортировки для базы данных см. на веб-узле корпорации Майкрософт.

В SQL Server 7.0 и более поздних версиях за физическое хранение символьных строк отвечают параметры сортировки. Настройка параметров сортировки поддерживается на четырех уровнях: экземпляра сервера, базы данных, столбца таблицы и выражения. Параметры сортировки определяют три свойства.

  • Кодовую страницу, используемую для хранения символьных данных не в Юникоде.

  • Порядок сортировки для типов данных в Юникоде (nchar, nvarchar и ntext). Порядок сортировки определяет последовательность расположения символов и способ их оценки при выполнении операций сравнения.

  • Порядок сортировки для типов данных не в Юникоде (char, varchar и text).

ПримечаниеПримечание

Корпорация Майкрософт рекомендует указывать имя параметров сортировки для каждого столбца в файле форматирования.

Общие сведения о кодовых страницах и параметрах сортировки см. в разделе Поддержка параметров сортировки и Юникода. Дополнительные сведения см. в разделе Работа с параметрами сортировки.

Использование параметров сортировки на уровне столбцов

В SQL Server 7.0 и более поздних версиях можно управлять преобразованием данных, указав параметры сортировки, в которых хранятся данные, в поле целевого файла данных для операции массового экспорта или столбце целевой таблице для операции массового импорта. Любые преобразования между параметрами сортировки файла данных и столбцов таблицы в базе данных выполняются операциями импорта и экспорта.

ПримечаниеПримечание

SQL Server 7.0 и более поздние версии позволяют указать кодовую страницу, однако лучше указать параметры сортировки в файле форматирования.

Параметры сортировки всегда применяются к столбцам SQLCHAR во время операций массового экспорта и импорта. Определение параметров сортировки столбцов всегда пропускается, если в определении основного типа данных отсутствуют типы SQLCHAR или SQLNCHAR. Параметры сортировки служат для определения порядка сортировки столбцов SQLCHAR и SQLNCHAR во время операций массового импорта, если ссылка на столбцы содержится в подсказке ORDER.

Для определения параметров сортировки используются файлы форматирования. Параметры сортировки на уровне столбцов можно указать в файлах форматирования обоих типов. Дополнительные сведения об использовании параметров сортировки на уровне столбцов в формате, отличном от XML, см. в следующем подразделе. Дополнительные сведения об использовании параметров сортировки в файлах форматирования XML см. в разделе Основные сведения о XML-файлах форматирования.

Определение параметров сортировки на уровне столбцов в файле форматирования в формате, отличном от XML

Последний (восьмой) столбец в файле форматирования в формате, отличном от XML, содержит определение параметров сортировки, указывающее способ хранения данных столбца в файле данных. К свойствам столбца параметров сортировки относятся следующие свойства.

Свойства

Описание

name

Определяет имя параметров сортировки, которые применяются для хранения данных в файле данных. Список имен параметров сортировки SQL см. в разделе Имя параметров сортировки SQL Server (Transact-SQL).

RAW

Указывает, что данные хранятся в кодовой странице, заданной в соответствующем параметре команды или подсказки bcp_control BCPFILECP. Если они не заданы, то параметры сортировки файла данных определяются кодовой страницей OEM клиентского компьютера.

ПримечаниеПримечание
Дополнительные сведения о параметрах кодовой страницы см. в подразделе «Использование кодовой страницы» далее в этом разделе. Дополнительные сведения о подсказке BCPFILECP см. в разделе bcp_control.

""

Эквивалентно значению RAW.

Примеры

В следующем примере показан файл форматирования в формате, отличном от XML, где параметры сортировки указаны для второго и третьего столбцов. Сведения о параметрах сортировки выделены полужирным шрифтом.

9.0
4
1       SQLCHAR       0       7       "\t"     1     DepartmentID     ""
2       SQLCHAR       0       100     "\t"     2     Name             SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR       0       100     "\t"     3     GroupName        SQL_Latin1_General_CP1_CI_AS
4       SQLCHAR       0       24      "\r\n"   4     ModifiedDate     ""
ПримечаниеПримечание

Предыдущий файл форматирования, предназначенный для работы с таблицей HumanResources.Department учебной базы данных База данных AdventureWorks2008R2, содержит четыре столбца: DepartmentID, Name, GroupName и ModifiedDate.

Дополнительные сведения о файлах форматирования в формате, отличном от XML, см. в разделе Основные сведения о файлах форматирования в формате, отличном от XML.

Использование кодовой страницы

ПримечаниеПримечание

Для управления преобразованием данных корпорация Майкрософт рекомендует использовать файлы форматирования, которые позволяют задать параметры сортировки на уровне столбцов для операций массового экспорта и импорта. Дополнительные сведения см. в разделе «Использование параметров сортировки на уровне столбцов».

Чтобы указать кодовую страницу, используйте следующий синтаксис.

  • Чтобы указать кодовую страницу в команде bcp, используйте переключатель -C:

    -C { ACP | OEM | RAW | code_page }

  • Чтобы указать кодовую страницу в инструкции BULK INSERT или INSERT ... В инструкции SELECT * FROM OPENROWSET(BULK...) используйте параметр CODEPAGE:

    CODEPAGE = { **'**ACP '| ' OEM ' | ' RAW '| 'code_page' }

И переключатель -C, и параметр CODEPAGE допускают следующие значения для кодовой страницы.

Значение кодовой страницы

Описание

ACP

Во время операции импорта поля данных типа char, varchar или text преобразуются из кодовой страницы ANSI/Windows (ISO 1252) в кодовую страницу SQL Server.

Во время операции экспорта команда bcp преобразует эти столбцы из кодовой страницы SQL Server в кодовую страницу ANSI/Windows.

OEM (по умолчанию)

Во время операции импорта поля данных типа char, varchar или text преобразуются из системной кодовой страницы OEM в кодовую страницу SQL Server.

Во время операции экспорта команда bcp преобразует эти столбцы из кодовой страницы SQL Server в системную кодовую страницу OEM.

RAW

Преобразование из одной кодовой страницы в другую не выполняется. Это наиболее быстрый параметр.

code_page

Используется кодовая страница с указанным номером (например, 850). Поддерживаемые кодовые страницы перечислены в разделе Архитектура кодовых страниц.

Примеры

В следующих примерах используется таблица HumanResources.myTeam в базе данных База данных AdventureWorks2008R2. Перед выполнением примеров следует создать эту таблицу. Дополнительные сведения о таблице и способе ее создания см. в разделе Создание таблицы HumanResources.myTeam.

ПримечаниеПримечание

Прежде чем приступить к выполнению следующего примера, удалите существующие строки из таблицы myTeam, чтобы избежать противоречащих первичных ключей.

А. Определение кодовой страницы при помощи команды bcp

В этом примере команда bcp используется для массового экспорта данных из таблицы HumanResources.myTeam в базе данных База данных AdventureWorks2008R2 в файл данных myTeam850.txt, при выполнении команды указана кодовая страница 850. В командной строке Windows введите:

bcp AdventureWorks2008R2.HumanResources.myTeam out myTeam850.txt -c -C850 -T

Б. Определение кодовой страницы при помощи инструкции BULK INSERT

В этом примере инструкция BULK INSERT используется для массового импорта файла myTeam850.txt, созданного командой bcp в предыдущем примере, в таблицу База данных AdventureWorks2008R2HumanResources.myTeam.

В средстве выполнения запросов, например в редакторе запросов Среда SQL Server Management Studio, выполните:

USE AdventureWorks2008R2;
GO
DELETE HumanResources.myTeam;
GO
BULK INSERT HumanResources.myTeam 
   FROM 'C:\myTeam850.txt'
   WITH (CODEPAGE = 850);
GO

Массовый экспорт данных со сменой параметров сортировки

Во время операции массового экспорта определение параметров сортировки отвечает за кодовую страницу, которая используется для хранения символьных данных в файле данных. Оно применяется:

  • ко всем столбцам файла данных символьного формата;

  • ко всем столбцам файла собственного формата, где в качестве основного типа данных файла указан SQLCHAR;

  • к символам SQLCHAR, значение которых больше 127 или меньше 32.

    Параметры сортировки применяются к символам со значениями от 127 до 32, однако все кодовые страницы сопоставляют эти символы значениям от 32 до 127, поэтому применение различных параметров сортировки не оказывает никакого эффекта.

Ниже перечислены правила определения параметров сортировки или кодовой страницы для операции массового экспорта.

  • Если параметры сортировки столбца указаны в файле форматирования или заданы при помощи функции ODBC bcp_setcolfmt (bcp_setcolfmt), для хранения символьных данных используется кодовая страница ANSI, связанная с параметрами сортировки.

  • Если параметры сортировки столбца не заданы, но кодовая страница указана при помощи соответствующего параметра в команде или подсказке bcp_control BCPFILECP, для хранения данных SQLCHAR таких столбцов используется указанная кодовая страница.

    ПримечаниеПримечание

    Дополнительные сведения о параметре кодовой страницы см. в разделе «Использование кодовой страницы» ранее в этом разделе. Дополнительные сведения о подсказке BCPFILECP см. в разделе bcp_control.

  • Если не указаны ни параметры сортировки, ни кодовая страница, для хранения данных SQLCHAR используется кодовая страница OEM клиентского компьютера.

ПримечаниеПримечание

Файл данных не содержит сведения о параметрах сортировки или о кодовой странице.

Массовый импорт данных со сменой параметров сортировки

Во время операции массового импорта выполняется интерпретация кодовой страницы столбцов, которые хранятся в виде символьных (SQLCHAR) данных в файле данных. В файле данных символьного формата все столбцы имеют тип SQLCHAR. Поскольку сведения о параметрах сортировки или кодовой странице отсутствуют в файле данных, при выполнении операции массового импорта эти сведения необходимо предоставить для каждого поля данных.

Ниже перечислены правила определения параметров сортировки или кодовой страницы для операции массового импорта.

  • Если параметры сортировки столбцов указаны в файле форматирования или при помощи функции ODBC bcp_setcolfmt (bcp_setcolfmt), для интерпретации данных SQLCHAR в файле данных используется кодовая страница ANSI, связанная с указанными параметрами сортировки столбца. Убедитесь, что указанные параметры сортировки соответствует параметрам сортировки в файле данных.

  • Если параметры сортировки столбца не заданы, но кодовая страница указана при помощи соответствующего параметра в команде или подсказке bcp_control BCPFILECP, для интерпретации данных SQLCHAR используется указанная кодовая страница.

    ПримечаниеПримечание

    Дополнительные сведения о параметре кодовой страницы см. в разделе «Использование кодовой страницы» ранее в этом разделе. Дополнительные сведения о подсказке BCPFILECP см. в разделе bcp_control.

  • Если не указаны ни параметры сортировки, ни кодовая страница, для интерпретации данных в столбцах SQLCHAR используется кодовая страница OEM клиентского компьютера.

Во время операции массового импорта задание параметров сортировки отвечает за следующее.

  • Способ интерпретации кодовой страницы столбцов SQLCHAR в файле данных.

  • Способ применения подсказки ORDER (если она задана) командой bcp или инструкцией BULK INSERT.

    Для правильной интерпретации подсказки ORDER операция массового импорта использует параметры сортировки. Эта подсказка применяется к столбцам SQLCHAR и SQLNCHAR. Данные в столбцах, на которые ссылается подсказка ORDER, должны соответствовать последовательности, определенной параметрами сортировки, который привязан к столбцам. Дополнительные сведения см. в разделе Управление порядком сортировки во время массового импорта данных.