При переносе данных 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 |
Преобразование |
||
Преобразование |
||
Преобразование |
||
Преобразование |
||
Преобразование |
||
Преобразование |
||
Дата и время |
||
Дата и время |
||
Дата и время |
||
Дата и время |
||
Дата и время |
||
Дата и время |
||
Дата и время |
||
Дата и время |
||
Дата и время |
||
Дата и время |
||
Дата и время |
||
Дата и время |
||
Дата и время |
||
Дата и время |
||
Дата и время |
||
Агрегатные функции по подмножеству |
||
Математическое выражение |
||
Математическое выражение |
||
Математическое выражение |
||
Математическое выражение |
||
Математическое выражение |
||
Математическое выражение |
||
Математическое выражение |
||
Математическое выражение |
||
Математическое выражение |
||
Математическое выражение |
||
Математическое выражение |
||
Управление |
||
Управление |
||
Статистические функции |
||
Статистические функции SQL |
||
Статистические функции SQL |
||
Статистические функции SQL |
||
Статистические функции SQL |
||
Статистические функции SQL |
||
Текстовые функции |
||
Текстовые функции |
||
Текстовые функции |
||
Текстовые функции |
||
Текстовые функции |
||
Текстовые функции |
||
Текстовые функции |
||
Текстовые функции |
||
Текстовые функции |