Сравнение языков Access SQL и SQL Server TSQL
Applies ToAccess для 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

    • Проверка на значение TRUE    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 в основном используются функции TSQL CAST и CONVERT TSQL, хотя имеются и другие функции преобразования для специальных целей. Например, вот как можно преобразовать число с плавающей запятой в строку.

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

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

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

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

  • В 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 есть широкий набор функций, и вы сможете узнать, какие из них доступны. Дополнительные сведения см. в статье Функции базы данных SQL.

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

Категория Access

Функция Access

Функция TSQL

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

Функция Chr

CHAR

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

Функция 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

ATN2

Математическое выражение

Функция Cos

COS

ACOS

Математическое выражение

Функция Exp

EXP

Математическое выражение

Функции Int, Fix

FLOOR

Математическое выражение

Функция Log

LOG

LOG10

Математическое выражение

Функция Rnd

RAND

Математическое выражение

Функция Round

ROUND

Математическое выражение

Функция Sgn

SIGN

Математическое выражение

Функция Sin

SIN

Математическое выражение

Функция Sqr

SQRT

Управление

Функция Choose

CHOOSE

Управление

Функция IIf

IIF

Статистические функции

Функция Avg

AVG

Статистические функции SQL

Функция Count

COUNT

COUNT_BIG

Статистические функции SQL

Функции Min, Max

MIN

MAX

Статистические функции SQL

Функции StDev, StDevP

STDEV

STDEVP

Статистические функции SQL

Функция Sum

SUM

Статистические функции SQL

Функции Var и VarP

VAR

VARP

Текстовые функции

Функция Format

FORMAT

Текстовые функции

Функция LCase

LOWER

Текстовые функции

Функция Left

LEFT

Текстовые функции

Функция Len

LEN

Текстовые функции

Функции LTrim, RTrim и Trim

TRIM

LTRIM

RTRIM

Текстовые функции

Функция Replace

REPLACE

Текстовые функции

Функция Right

RIGHT

Текстовые функции

Функция StrReverse

REVERSE

Текстовые функции

Функция UCase

UPPER

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

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