Написание интернационализированных инструкций на языке Transact-SQL

Изменения: 17 июля 2006 г.

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

  • Все элементы с типами данных char, varchar и text замените элементами с типами данных nchar, nvarchar и nvarchar(max). Такая замена устраняет возможные проблемы с преобразованием кодовых страниц. Дополнительные сведения см. в разделах Работа с данными в Юникоде и Программирование на сервере с использованием Юникода.
  • При выполнении сравнения и других операций со значениями месяцев и дней недели следует использовать числовые эквиваленты вместо строковых имен. При различных языковых настройках возвращаются различные названия месяцев и дней недели. Например, функция DATENAME(MONTH,GETDATE()) при выбранном английском (США) языке возвращает значение «May», при немецком — «Mai», а при французском — «mai». Вместо нее следует использовать функцию DATEPART(), в которой вместо названия месяца используется его номер. При выводе результирующих наборов пользователю лучше использовать названия из функции DATEPART(), так как они зачастую более информативны, чем числовое представление даты. Однако не следует кодировать какую-либо логику, зависящую от отображаемых названий на том или ином языке.
  • При указании дат для сравнения либо ввода с помощью инструкций INSERT или UPDATE следует использовать константы, интерпретируемые одним и тем же образом для всех языковых настроек.
    • В приложениях ADO, OLE DB и ODBC следует использовать принятые в ODBC форматы временных меток, даты и времени:
      { ts'гггг-мм-ддчч**:мм:сс[.ттт] '}, например: { ts'1998-09-24 10:02:20' }**
      { d'гггг-мм-дд**'}, например: { d'1998-09-24'}**
      { t'чч:мм:сс'}, например: { t'10:02:20'}

    • В приложениях с использованием других прикладных программных API-интерфейсов, а также в сценариях языка Transact-SQL, хранимых процедурах и триггерах следует использовать числовые строки без разделителей. Например, yyyymmdd в виде 19980924.

    • В приложениях с использованием других прикладных программных API-интерфейсов, а также в сценариях языка Transact-SQL, хранимых процедурах и триггерах следует использовать инструкцию CONVERT с явно заданным параметром стиля для всех преобразований между типами данных date и smalldate, а также строковыми типами данных. Например, следующая инструкция интерпретируется одинаково для любых настроек языка и формата даты в соединении:

      SELECT *
      FROM AdventureWorks.Sales.SalesOrderHeader
      WHERE OrderDate = CONVERT(DATETIME, '19960719', 101)
      

      Дополнительные сведения см. в разделе Функции CAST и CONVERT (Transact-SQL).

См. также

Другие ресурсы

Вопросы международного использования баз данных и приложений компонента Database Engine

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

17 июля 2006 г.

Изменения:
  • Заменены ссылки на тип данных ntext ссылками на тип данных nvarchar(max).