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

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

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

Дополнительные сведения см. в разделах 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.

    • Проверка ложного значения 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 с помощью операторов = и <> . Рекомендуется не использовать этот параметр, потому что он устарел и может вызвать замешательство у других пользователей, которые в работе с NULL придерживаются стандарта ISO.

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

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

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


CStr(437.324) returns the string "437.324".

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


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 ФОРМАТ
Преобразование Формат FormatPercent ФОРМАТ
Преобразование Функция Str УЛ
Преобразование Функции преобразования типа CAST и 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
ATN2
Математическое выражение Функция Cos COS
ACOS
Математическое выражение Функция Exp EXP
Математическое выражение Функции Int, Fix FLOOR
Математическое выражение Функция Log LOG
LOG10
Математическое выражение Функция Rnd RAND
Математическое выражение Функция Round ОКРУГЛ
Математическое выражение Функция Sgn SIGN
Математическое выражение Функция Sin SIN
Математическое выражение Функция Sqr КОРЕНЬ
Управление Функция Choose ВЫБОР
Управление Функция IIf IIF
Статистические функции Функция Avg СРЕДНЯЯ
Статистические функции SQL Функция Count СЧЁТ
COUNT_BIG
Статистические функции SQL Функции Min, Max МИН
МАКС
Статистические функции SQL Функции StDev, StDevP СТАНДОТКЛОН
СТАНДОТКЛОНП
Статистические функции SQL Функция Sum СУММ
Статистические функции SQL Функции Var и VarP ДИСП
ДИСПР
Текстовые функции Функция Format ФОРМАТ
Text (Текст) Функция LCase LOWER
Text (Текст) Функция Left ЛЕВОЙ
Text (Текст) Функция Len ЛЕН
Text (Текст) Функции LTrim, RTrim и Trim TRIM
LTRIM
RTRIM
Text (Текст) Функция Replace ЗАМЕНИТЬ
Text (Текст) Функция Right ПРАВИЛЬНО
Text (Текст) Функция StrReverse ОБРАТНЫЙ
Text (Текст) Функция UCase UPPER