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

Перетворення та передавання

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

В Access використовуються функції перетворення типу, кожна з яких починається на літеру C. Їх одинадцять (по одній для кожного типу даних). Наприклад, ось як перетворити число з рухомою комою на рядок.


CStr(437.324) returns the string "437.324".

У SQL Server ви в першу чергу використовуєте функції CAST і CONVERT TSQL, хоча існують й інші функції перетворення для спеціалізованих потреб. Наприклад, ось як перетворити число з рухомою комою на рядок.


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

Функції DateAdd, DateAdd і DateAdd

Ці найпоширеніші функції дат (DateAdd, DateAdd і DateAdd) подібні у програмах 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, щоб отримати результати. Якщо запити перенесено до сервера SQL Server, потрібно замінити функцію Access на еквіваленту функцію TSQL, якщо вона доступна. Якщо відповідної функції TSQL немає, зазвичай можна створити обчислюваний стовпець (термін TSQL, який використовується для обчислюваного стовпця), щоб виконати потрібні дії. TSQL має широкий спектр функцій, і це на вашу користь, щоб побачити, що доступно. Докладні відомості див. в статті Функції бази даних SQL.

У таблиці нижче показано відповідність функцій Access до функцій TSQL.

Категорія Access Функція Access Функція TSQL
Перетворення Функція Chr CHAR
Перетворення Функція 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 МІСЯЦЬ
Дата й час Функція Now ЧАС SYSDATETIME
Дата й час Функція Second TIMEFROMPARTS
Функція Time TIMEFROMPARTS
Дата й час Функція TimeSerial TIMEFROMPARTS
Дата й час Функція Weekday DATEPART
DATENAME (ІМ'Я ДАТИ)
Дата й час Функція 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 СР
Статистичні функції SQL Функція Count COUNT
COUNT_BIG
Статистичні функції SQL Функції Min, Max MIN
MAX
Статистичні функції SQL Функції StDev, StDevP STDEV
STDEVP
Статистичні функції SQL Функція Sum SUM
Статистичні функції SQL Функції Var, VarP VAR
VARP
Text (Текст) Функція Format ФОРМАТ
Text (Текст) Функція LCase LOWER
Text (Текст) Функція Left ЗАЛИШИВ
Text (Текст) Функція Len LEN
Text (Текст) Функції LTrim, RTrim і Trim TRIM
LTRIM
RTRIM
Text (Текст) Функція Replace ЗАМІНИТИ
Text (Текст) Функція Right ПРАВОРУЧ
Text (Текст) Функція StrReverse ЗВОРОТНИЙ
Text (Текст) Функція UCase UPPER