Щоб перенести дані 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-значення, застосовують тризначну логіку. Це означає, що щось може бути істинним, хибним або невідомим. Якщо неправильно обробляти значення, можна отримати хибні результати, роблячи порівняння рівності або оцінюючи речення 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, працюючи з Null-значенням.
Перетворення та передавання
Під час роботи з даними або програмування існує постійна потреба перетворювати один тип даних на інший. Процес перетворення може бути простим або складним. Зверніть увагу на таке: явні та неявні перетворення, поточні параметри дати й часу, округлення або скорочення чисел, а також розмір типу даних. Ніщо не замінить ретельне тестування та підтвердження результатів.
В Access використовуються функції перетворення типу, кожна з яких починається на літеру C. Їх одинадцять (по одній для кожного типу даних). Наприклад, ось як перетворити число з рухомою комою на рядок.
CStr(437.324) returns the string "437.324".
У SQL Server здебільшого використовуються функції TSQL CAST і CONVERT, хоча також існують інші функції перетворення для спеціальних цілей. Наприклад, ось як перетворити число з рухомою комою на рядок.
CONVERT(TEXT, 437.324) returns the string "437.324"
Функції DateAdd, DateAdd і DateAdd
Ці найпоширеніші функції дат (DateAdd, DateAdd і DateAdd) подібні у програмах 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, щоб отримати результати. Якщо запити перенесено до сервера SQL Server, потрібно замінити функцію Access на еквіваленту функцію TSQL, якщо вона доступна. Якщо відповідної функції TSQL немає, зазвичай можна створити обчислюваний стовпець, щоб виконати потрібні дії. Мова TSQL має широкий спектр функцій, і ви зможете дізнатися, які з них доступні. Докладні відомості див. в статті Функції бази даних SQL.
У таблиці нижче показано відповідність функцій Access до функцій TSQL.
Категорія Access |
Функція Access |
Функція TSQL |
Перетворення |
||
Перетворення |
||
Перетворення |
||
Перетворення |
||
Перетворення |
||
Перетворення |
||
Дата й час |
||
Дата й час |
||
Дата й час |
||
Дата й час |
||
Дата й час |
||
Дата й час |
||
Дата й час |
||
Дата й час |
||
Дата й час |
||
Дата й час |
||
Дата й час |
||
Дата й час |
||
Дата й час |
||
Дата й час |
||
Дата й час |
||
Агрегатні функції домену |
||
Математичний вираз |
||
Математичний вираз |
||
Математичний вираз |
||
Математичний вираз |
||
Математичний вираз |
||
Математичний вираз |
||
Математичний вираз |
||
Математичний вираз |
||
Математичний вираз |
||
Математичний вираз |
||
Математичний вираз |
||
Перебіг програми |
||
Перебіг програми |
||
Статистичні функції |
||
Статистичні функції SQL |
||
Статистичні функції SQL |
||
Статистичні функції SQL |
||
Статистичні функції SQL |
||
Статистичні функції SQL |
||
Текст |
||
Текст |
||
Текст |
||
Текст |
||
Текст |
||
Текст |
||
Текст |
||
Текст |
||
Текст |