Сравнение языков SQL (Access) и TSQL (SQL Server)

Применяется к
Access для Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

При переносе данных Access на SQL Server или создании решения Access с внутренней базой данных SQL Server чрезвычайно важно знать различия между SQL в Access и Transact SQL (TSQL) в SQL Server. Ниже приведены важные различия, знание которых необходимо для правильной работы вашего решения.

Дополнительные сведения см. в статьях Access SQL. Основные понятия, лексика и синтаксис и Справочные материалы о Transact-SQL.

Различия в синтаксисе и выражениях

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

Различие SQL в Access TSQL в SQL Server
Атрибут реляционной базы данных Обычно называется полем Обычно называется столбцом
Строковые литералы Кавычки ("), например, "Mary Q. Contrary" Апостроф ('), например, 'Mary Q. Contrary'
Литералы даты Решетка (#), например, #1/1/2019# Апостроф ('), например, '1/1/2019'
Многосимвольный подстановочный знак Звездочка (*), например, "Cath*" Процент (%), например, 'Cath%'
Односимвольный подстановочный знак Вопросительный знак (?), например, "Cath?" Подчеркивание (_), например, "Cath_"
Оператор остатка от деления Оператор MOD, например, Value1 MOD Value2 Процент (%), например, Value1 % Value2
Логические значения WHERE Bitvalue = [True | False]
или
WHERE Bitvalue = [-1 | 0]
WHERE Bitvalue = [1 | 0]
Параметры [<Имя, которое не является определенным столбцом>]
Или
В режиме SQL используйте объявление параметров SQL.
@ParamName

Примечания

  • Программа Access берет в кавычки (") имена и объекты таблицы. Язык T-SQL может использовать кавычки для имен таблиц с пробелами, но это не общепринятая практика. В большинстве случаев объекты следует переименовать, чтобы в имени не было без пробелов. Также необходимо перезаписать запросы, чтобы отображались новые имена таблиц. Используйте квадратные скобки [ ] для таблиц, которые невозможно переименовать, хотя они не соответствуют стандартам именования. Программа Access заключает параметры в запросах в дополнительные круглые скобки, но в языке T-SQL их можно удалить.

  • Рекомендуется использовать канонический формат даты (гггг-мм-дд чч:мм:сс), который является стандартом ODBC для дат, сохраненных в виде знаков, и обеспечивает единообразие представления данных в базах данных и сохраняет порядок сортировки дат.

  • Чтобы избежать путаницы при сравнении логических значений, можно использовать приведенное ниже сравнение для Access и SQL Server.

    • Проверка на значение FALSE WHERE Bitvalue = 0
    • Проверка на значение "истина" WHERE Bitvalue <> 0

Значения NULL

Значение NULL — это не пустое поле, это "поле, не содержащее никакого значения". Значение NULL — это заполнитель, который означает, что данные отсутствуют или неизвестны. Системы баз данных, которые распознают значения NULL, применяют трехзначную логику. Это означает, что что-то может быть истинно, ложно или неизвестно. Если неправильно обрабатывать значения NULL, можно получить неправильные результаты сравнения на равенство или оценки предложений WHERE. Ниже приведено сравнение того, как Access и SQL Server работают со значениями NULL.

Отключение значений NULL в таблице

По умолчанию в Access и SQL Server значения NULL включены. Чтобы отключить значения NULL в столбце таблицы, выполните указанные ниже действия.

  • В программе Access установите значение свойства поля Обязательное равным “Да”.
  • В SQL Server добавьте атрибут NOT NULL в столбец в инструкции CREATE TABLE.

Проверка на значения NULL в предложении WHERE

Используйте предикаты сравнения IS NULL и IS NOT NULL.

  • В Access используйте предикаты IS NULL или IS NOT NULL. Пример.

    SELECT … WHERE column IS NULL.
    
  • В SQL Server используйте предикаты IS NULL или IS NOT NULL. Пример.

    SELECT … WHERE field IS NULL
    

Преобразование значений NULL с помощью функций

Используйте функции NULL для защиты выражений и возврата альтернативных значений.

  • В Access используйте функцию NZ (value, [valueifnull]), которая возвращает 0 или другое значение. Пример.

    SELECT AVG (NZ (Weight, 50) ) FROM Product
    
  • В SQL Server используйте функцию ISNULL(Value, replacement_value), которая возвращает 0 или другое значение. Пример.

    SELECT AVG (ISNULL (Weight, 50)) FROM Product
    

Общие сведения о параметрах базы данных

В некоторых системах баз данных есть особые механизмы.

  • В Access нет параметров базы данных со значением NULL.
  • В SQL Server для прямых сравнений на равенство можно использовать параметр SET ANSI_NULLS OFF, используя операторы = и <> Рекомендуется не использовать этот параметр, потому что он устарел и может вызвать замешательство у других пользователей, которые в работе с NULL придерживаются стандарта ISO.

Преобразование и приведение

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

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


CStr(437.324) returns the string "437.324".

В SQL Server в основном используются функции TSQL CAST и CONVERT, хотя имеются и другие специальные функции преобразования. Например, вот как можно преобразовать число с плавающей запятой в строку.


CONVERT(TEXT, 437.324) returns the string "437.324"

Функции DateAdd, DateDiff и DatePart

Такие же функции (DateAdd, DateDiff и DatePart) часто используются в Access и TSQL, но у них отличается первый аргумент.

  • В Access первый аргумент называется интервал. Это строковое выражение, которое берется в кавычки.

  • В SQL Server первый аргумент называется datepart. Он использует значения ключевых слов, не требующие кавычек.

    Компонент Access SQL Server
    Год "yyyy" year, yy, yyyy
    Квартал "q" quarter, qq, q
    Месяц "m" month, mm, m
    День года "y" dayofyear, dy, y
    День "d" day, dd, d
    Неделя "ww" wk, ww
    День недели "w" weekday, dw
    Часы "h" hour, hh
    Минуты "n" minute, mi, n
    Секунды "s" second, ss, s
    Миллисекунды millisecond, ms

Сравнение функций

В запросах Access могут содержаться вычисляемые столбцы, которые иногда используют функции Access Functions, чтобы получить результаты. При миграции запросов на сервер SQL Server необходимо заменить функцию Access эквивалентной функцией TSQL, если она доступна. Если не имеется соответствующей функции TSQL, обычно можно создать вычисляемый столбец (термин TSQL для обозначения вычисляемого столбца), чтобы выполнять необходимые действия. В TSQL есть широкий набор функций, и вы сможете узнать, какие из них доступны. Дополнительные сведения см. в статье Что такое функции баз данных SQL?.

В приведенной ниже таблице показано соответствие функций Access и TSQL.

Категория Access Функция Access Функция TSQL
Преобразование Функция Chr СИМВОЛ
Преобразование Функция Day DAY
Преобразование Функция FormatNumber FORMAT (ФОРМАТ)
Преобразование Формат FormatPercent FORMAT (ФОРМАТ)
Преобразование Функция Str STR
Преобразование Функции преобразования типа CAST and CONVERT
Дата и время Функция Date CURRENT_TIMESTAMP
Дата и время Функция Day DATEFROMPARTS
Дата и время Функция DateAdd DATEADD
Дата и время Функция DateDiff DATEDIFF
DATEDIFF_BIG
Дата и время Функция DatePart DATEPART
Дата и время Функция DateSerial DATEFROMPARTS
Дата и время Функция DateValue DATENAME (ДАТА)
Дата и время Функция Hour TIMEFROMPARTS
Дата и время Функция Minute TIMEFROMPARTS
Дата и время Функция Month MONTH
Дата и время Функция Now SYSDATETIME
Дата и время Функция Second TIMEFROMPARTS
Функция Time TIMEFROMPARTS
Дата и время Функция TimeSerial TIMEFROMPARTS
Дата и время Функция Weekday DATEPART
DATENAME (ДАТА)
Дата и время Функция Year YEAR
DATEFROMPARTS
Агрегатные функции по подмножеству Функции DFirst, DLast FIRST_VALUE
LAST_VALUE
Математическое выражение Функция Abs ABS
Математическое выражение Функция Atn ATAN
АТН2
Математическое выражение Функция Cos COS
ACOS
Математическое выражение Функция Exp EXP
Математическое выражение Функции Int, Fix FLOOR
Математическое выражение Функция Log LOG
LOG10
Математическое выражение Функция Rnd RAND
Математическое выражение Функция Round ОКРУГЛ
Математическое выражение Функция Sgn SIGN
Математическое выражение Функция Sin SIN
Математическое выражение Функция Sqr КОРЕНЬ
Управление Функция Choose ВЫБЕРИТЕ
Управление Функция IIf IIF
Статистические функции Функция Avg AVG
Статистические функции SQL Функция Count СЧЁТ
COUNT_BIG
Статистические функции SQL Функции Min, Max МИН
МАКС
Статистические функции SQL Функции StDev, StDevP СТАНДОТКЛОН
СТАНДОТКЛОНП
Статистические функции SQL Функция Sum СУММ
Статистические функции SQL Функции Var и VarP ДИСП
ДИСПР
Текстовые функции Функция Format FORMAT (ФОРМАТ)
Text (Текст) Функция LCase LOWER
Text (Текст) Функция Left СЛЕВА
Text (Текст) Функция Len LEN
Text (Текст) Функции LTrim, RTrim и Trim TRIM
LTRIM
RTRIM
Text (Текст) Функция Replace REPLACE (ЗАМЕНИТЬ)
Text (Текст) Функция Right СПРАВА
Text (Текст) Функция StrReverse РЕВЕРС
Text (Текст) Функция UCase UPPER