Сравняване на Access SQL с SQL Server TSQL

Отнася се за
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 reference.

Разлики в синтаксиса и изразите

Има няколко разлики в синтаксиса и изразите, които изискват конвертиране. Следващата таблица обобщава най-често използваните.

Разлика Access SQL SQL Server TSQL
Атрибут на релационна база данни Обикновено се нарича поле Обикновено се нарича колона
Валиден формат за низове Кавичка ("), като например"Людмила Господинова" Апостроф ('), като например 'Людмила Господинова'
Валиден формат за дата Знак за фунт (#), като например #1/1/2019# Апостроф ('), като например '1/1/2019'
Повече от един заместващ символ Звездичка (*), като например "кот*" Процент (%), като например 'кот%'
Един заместващ символ Въпросителен знак (?), като например "кот?" Долна черта (_), като например "кот_"
Оператор за модул Оператор MOD, като напр. Стойност1 MOD Стойност2 Процент (%), като напр. Стойност1 % Стойност2
Булеви стойности WHERE Bitvalue = [True | False]
Или
WHERE Bitvalue = [-1 | 0]
WHERE Bitvalue = [1 | 0]
Параметри [<Име, което не е дефинирана колона>]
Или
В SQL изглед използвайте SQL декларацията за параметри
@ParamName

Забележки

  • Access използва знаци за кавичка (") около имената на таблиците и обектите. T-SQL може да ги използва за имената на таблиците с интервали, но това не е стандартна практика за именуване. В повечето случаи имената на обектите трябва да се преименуват без интервали, но заявките трябва да бъдат пренаписани така, че да отразяват новите имена на таблиците. Използвайте квадратни скоби [] за таблици, които не могат да бъдат преименувани, но които не отговарят на стандартите за именуване. Access също така добавя допълнителни кръгли скоби около параметрите в заявките, но те могат да бъдат премахнати в T-SQL.

  • Обмислете дали да не използвате каноничния формат за дата, yyyy-mm-dd hh:nn:ss, който е ODBC стандарт за дати, съхранявани като знаци, предоставящ съгласуван начин за тяхното представяне в базите данни и запазващ реда на сортиране по дата.

  • За да избегнете объркване, когато сравнявате булеви стойности, можете да използвате следното сравнение за Access и SQL Server:

    • Проверка за грешна стойност WHERE Bitvalue = 0
    • Проверка за стойност true WHERE Bitvalue <> 0

Стойности Null

Стойността Null не е празно поле, което означава "изобщо няма стойност". Стойността null е контейнер, който означава, че данните липсват или са неизвестни. Системите бази данни, които разпознават стойности Null, реализират "логика с три стойности", което означава, че нещо може да бъде true, false или неизвестно. Ако не обработвате правилно стойности Null, можете да получите неправилни резултати, когато правите сравнения за равенство или оценявате клаузи WHERE. Ето сравнение как Access и SQL Server обработват стойностите null.

Забраняване на стойностите null в таблица

в Access и SQL Server по подразбиране стойностите Null са разрешени. За да забраните стойности null в колона на таблица, направете следното:

  • В Access задайте свойството Required на поле на Yes.
  • В SQL Server добавете атрибута NOT NULL към колона в команда CREATE TABLE.

Тест за стойности null в клауза WHERE

Използвайте предикатите IS NULL и IS NOT NULL за сравнение:

  • В Access използвайте IS NULL и IS NOT NULL. Например:

    SELECT … WHERE column IS NULL.
    
  • В Access използвайте 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 използвате функциите за конвертиране на тип, които са единадесет и започват с буквата C, по една за всеки тип данни. Например, за да конвертирате число с плаваща запетая в низ:


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, за да получат резултати. Когато мигрирате заявките към SQL Server, трябва да смените функцията на Access с равностойна TSQL функция, ако има такава. Ако няма съответна TSQL функция, тогава обикновено можете да създадете изчисляема колона (TSQL термин, използван за изчисляема колона), за да направите това, което искате. TSQL има широк набор от функции и е от ваша полза да видите какво се предлага. За повече информация вижте Какво представляват функциите за SQL база данни?.

Таблицата по-долу показва коя функция на Access има съответстваща функция на TSQL.

Категория на Access Функция на Access TSQL функция
Конвертиране Функция Chr CHAR
Конвертиране Функция Day DAY
Конвертиране Функция FormatNumber ФОРМАТ
Конвертиране Функция FormatPercent ФОРМАТ
Конвертиране Функция Str STR
Конвертиране Функции за конвертиране на типове CAST и CONVERT
Дата/час Функция Date CURRENT_TIMESTAMP
Дата/час Функция Day ДАТА НА ЧАСТИТЕ
Дата/час Функция DateAdd DATEADD
Дата/час Функция DateDiff DATEDIFF
DATEDIFF_BIG
Дата/час Функция DatePart ЧАСТ ОТ ДАТА
Дата/час Функция DateSerial ДАТА НА ЧАСТИТЕ
Дата/час Функция DateValue ИМЕ НА ДАТА
Дата/час Функция Hour ВРЕМЕ ОТ ЧАСТИ
Дата/час Функция Minute ВРЕМЕ ОТ ЧАСТИ
Дата/час Функция Month MONTH
Дата/час Функция Now SYSDATETIME
Дата/час Функция Second ВРЕМЕ ОТ ЧАСТИ
Функция Time ВРЕМЕ ОТ ЧАСТИ
Дата/час Функция TimeSerial ВРЕМЕ ОТ ЧАСТИ
Дата/час Функция Weekday ЧАСТ ОТ ДАТА
ИМЕ НА ДАТА
Дата/час Функция Year YEAR
ДАТА НА ЧАСТИТЕ
Агрегатна функция на домейн Функции DFirst и DLast FIRST_VALUE
LAST_VALUE
Математика Функция Abs ABS
Математика Функция Atn ATAN
5000000000
Математика Функция 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
Text Функция Format ФОРМАТ
Text Функция LCase LOWER
Text Функция Left ЛЯВО
Text Функция Len ЛЕН
Text Функции LTrim, RTrim и Trim TRIM
LTRIM
RTRIM
Text Функция Replace ЗАМЕНИ
Text Функция Right ДЯСНО
Text Функция StrReverse ОБРАТНАТА
Text Функция UCase UPPER