Сравняване на Access SQL с SQL Server TSQL
Applies ToAccess за 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:

    • Проверка за стойност false    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, съвместима с ISO.

Конвертиране и прехвърляне

Всеки път, когато работите с данни или програмирате, има постоянна нужда да конвертирате от един тип данни в друг. Процесът на конвертиране може да бъде прост или сложен. Често срещани проблеми, за които трябва да се замислите, са: неявно или явно конвертиране, текущите регионални настройки за дата и час, закръгляването или отрязването на числата и размерите на типовете данни. Няма заместител на щателното тестване и потвърждаването на резултатите.

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

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

Категория на Access

Функция на Access

TSQL функция

Конвертиране

Функция Chr

CHAR

Конвертиране

Функция Day

DAY

Конвертиране

Функция FormatNumber

FORMAT

Конвертиране

Функция FormatPercent

FORMAT

Конвертиране

Функция Str

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

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

Нуждаете ли се от още помощ?

Искате ли още опции?

Разгледайте ползите от абонамента, прегледайте курсовете за обучение, научете как да защитите устройството си и още.

Общностите ви помагат да задавате и отговаряте на въпроси, да давате обратна връзка и да получавате информация от експерти с богати знания.