Ако мигрирате вашите данни на 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 функция |
Конвертиране |
||
Конвертиране |
||
Конвертиране |
||
Конвертиране |
||
Конвертиране |
||
Конвертиране |
||
Дата/час |
||
Дата/час |
||
Дата/час |
||
Дата/час |
||
Дата/час |
||
Дата/час |
||
Дата/час |
||
Дата/час |
||
Дата/час |
||
Дата/час |
||
Дата/час |
||
Дата/час |
||
Дата/час |
||
Дата/час |
||
Дата/час |
||
Агрегатна функция на домейн |
||
Математика |
||
Математика |
||
Математика |
||
Математика |
||
Математика |
||
Математика |
||
Математика |
||
Математика |
||
Математика |
||
Математика |
||
Математика |
||
Поток на програмата |
||
Поток на програмата |
||
Статистически |
||
Агрегатна функция на SQL |
||
Агрегатна функция на SQL |
||
Агрегатна функция на SQL |
||
Агрегатна функция на SQL |
||
Агрегатна функция на SQL |
||
Текст |
||
Текст |
||
Текст |
||
Текст |
||
Текст |
||
Текст |
||
Текст |
||
Текст |
||
Текст |