Kui migreerite Oma Accessi andmed SQL Server või loote Accessi lahenduse, mille tagaandmebaasiks on SQL Server, on väga oluline, et teaksite Access SQL-i ja SQL Server Transact SQL-i (TSQL) vahelisi erinevusi. Järgnevalt tuuakse välja olulised erinevused, millega peate arvestama, et lahendus ootuspäraselt töötaks.
Lisateavet leiate teemadest Access SQL: põhimõisted, sõnavara ja süntaks ja Transact-SQL-i viide.
Süntaksi ja avaldise erinevused
Süntaksites ja avaldistes on mõned erinevused, mis nõuavad teisendamist. Järgmises tabelis on toodud levinumad.
|
Erinevus |
Access SQL |
SQL Server |
|
Seotava andmebaasi atribuut |
Nimetatakse tavaliselt väljaks |
Nimetatakse tavaliselt veeruks |
|
Stringiliteraalid |
Jutumärgid ("), näiteks "Mary Q. Contrary" |
Ülakoma ('), näiteks 'Mary Q. Contrary' |
|
Kuupäevaliteraalid |
Trellid (#), näiteks #1/1/2019# |
Ülakoma ('), näiteks '1/1/2019' |
|
Mitme metamärgi märk |
Tärn (*), näiteks "Cath*" |
Protsendimärk (%), näiteks 'Cath%' |
|
Ühe metamärgi märk |
Küsimärk (?), näiteks "Cath?" |
Allkriips (_), näiteks "Cath_" |
|
Moodultehtemärk |
MOD-tehtemärk, näiteks Value1 MOD Value2 |
Protsendimärk (%),näiteks Value1 % Value2 |
|
Kahendväärtused |
WHERE Bitvalue = [True | False] või WHERE Bitvalue = [-1 | 0] |
WHERE Bitvalue = [1 | 0] |
|
Parameetrid |
[<A name that is not a defined column>] või SQL-i vaates kasutage SQL-i parameetrite deklaratsiooni |
@ParamName |
Märkused
-
Access kasutab tabelite nimede ja objektide ümber jutumärke ("). T-SQL võib neid kasutada tühikuid sisaldavate tabelinimede puhul, kuid standardina sellist nimetamisviisi ei kasutata. Enamasti tuleb objektinimed asendada tühikuteta nimedega. Päringud tuleb aga alati ümber kirjutada ja kasutada uusi tabelinimesid. Kui teil on ebastandardse nimega tabel, mida ei saa ümber nimetada, kasutage sulgusid [ ]. Access lisab päringutes parameetrite ümber ka lisasulud, kuid need saab T-SQL-is eemaldada.
-
Kaaluge võimalust kasutada ODBC standarditele vastavat kanoonilist kuupäevavormingut (yyyy-mm-dd hh:nn:ss), mis võimaldab andmeid ühtlaselt eri andmebaasides esitada ning tagab sortimisjärjestuse säilimise.
-
Kahendväärtuste võrdlemisel asjade segamini ajamise vältimiseks saate Accessi ja SQL Serveri andmeid järgmiselt võrrelda.
-
Väärtuse „FALSE“ testimine WHERE Bitvalue = 0
-
Väärtuse „TRUE“ testimine WHERE Bitvalue <> 0
-
Nullväärtused
Tühiväärtus pole tühi väli, mis tähendab "ühtegi väärtust pole". Nullväärtus on kohatäide, mis viitab sellele, et andmed puuduvad või need on teadmata. Tühiväärtusi tuvastavad andmebaasisüsteemid rakendavad "kolme väärtusega loogikat", mis tähendab, et miski võib olla tõene, väär või tundmatu. Kui te ei käsitle tühiväärtusi õigesti, saate võrdluste tegemisel või WHERE-klauslite hindamisel valesid tulemeid. Siin võrreldakse, kuidas Access ja SQL Server tühiväärtuseid töötlevad.
Tabelis nullväärtuste keelamine
Accessis ja SQL-serveris on nullväärtused vaikimisi lubatud. Tabeliveerus nullväärtuste keelamiseks tehke järgmist.
-
Määrake Accessis välja Nõutav atribuudiks „Yes“.
-
LSQL Serveris lisage lause CREATE TABLE veerule atribuut NOT NULL.
Testige nullväärtusi WHERE-klauslis
Kasutage võrdluspredikaate IS NULL ja IS NOT NULL
-
Accessis valige IS NULL või IS NOT NULL. Näide.
SELECT … WHERE column IS NULL.
-
SQL Serveris valige IS NULL või IS NOT NULL. Näide.
SELECT … WHERE field IS NULL
Nullväärtuste teisendamine funktsioonidega
Kasutage avaldiste kaitsmiseks ja alternatiivsete väärtuste tagastamiseks nullfunktsioone.
-
Accessis kasutage funktsiooni NZ (value, [valueifnull]) või muud funktsiooni, mis tagastab 0-i või muu väärtuse. Näide.
SELECT AVG (NZ (Weight, 50) ) FROM Product
-
SQL Serveris kasutage funktsiooni ISNULL(Value, replacement_value) või muud funktsiooni, mis tagastab 0-i või muu väärtuse. Näide.
SELECT AVG (ISNULL (Weight, 50)) FROM Product
Andmebaasi suvandid
Mõnedel andmebaasidel on omad mehhanismid.
-
Accessis ei ole andmebaasivõimalusi, mis seostuvad nulliga.
-
SQL Serveris saate valiku SET ANSI_NULLS OFF abil kasutada otsest võrdlemist NULLIGA tehtemärkide = ja < > abil. Soovitame seda võimalust pigem mitte kasutada, kuna see lahendus on iganenud ja võib tekitada segadust nende kasutajate puhul, kes rakendavad ISO nõuetele vastavat nullväärtuse töötlemist.
Teisendamine ja esitamine
Andmetega töötamise või programmeerimise korral tuleb pidevalt erinevaid andmetüüpe teisendada. Teisendamisprotsess võib olla lihtne või keerukas. Ennekõike peate tähelepanu pöörama järgmisele: kaudne või otsene teisendus, praegused kuupäeva- ja piirkondlikud sätted, numbrite ümardamine ja kärpimine ning andmetüübi suurused. Põhjalik testimine ja tulemuste kinnitamine pole asendatud.
Accessis saate kasutada tüübiteisendusfunktsioone, mida on üksteist. Kõik algavad tähega C (üks iga andmetüübi jaoks). Näiteks ujupunkti stringiks teisendamiseks tehke järgmist.
CStr(437.324) returns the string "437.324".
SQL Serveris kasutage esimese valikuna funktsioone CAST ja CONVERT TSQL. On ka muid teisendamisfunktsioone teatud eriolukordades kasutamiseks. Näiteks ujupunkti stringiks teisendamiseks tehke järgmist.
CONVERT(TEXT, 437.324) returns the string "437.324"
Funktsioonid DateAdd, DateDiff ja DatePart
Need sageli kasutatavad Accessi ja TSQL-i funktsioonid (DateAdd, DateDiff ja DatePart) on muidu sarnased, kuid nende esimese argumendi rakendamine on erinev.
-
Accessis nimetatakse esimest argumenti intervalliks ja see on stringiavaldis, mis nõuab jutumärke.
-
SQL Server nimetatakse esimest argumenti kuupäevaosaks ja see kasutab märksõnaväärtusi, mis ei nõua jutumärke.
Komponent
Access
SQL Server
Year (aasta)
"yyyy"
year, yy, yyyy
Quarter (kvartal)
"q"
quarter, qq, q
Month (kuu)
"m"
month, mm, m
Day of Year (aasta päev)
"y"
dayofyear, dy, y
Day (päev)
"d"
day, dd, d
Week (nädal)
"ww"
wk, ww
Nädalapäev
"w"
weekday, dw
Hour (tund)
"h"
hour, hh
Minute (minut)
"n"
minute, mi, n
Second (sekund)
"s"
second, ss, s
Millisecond (millisekund)
millisecond, ms
Funktsioonide võrdlus
Accessi päringud võivad sisaldada arvutatavate väärtustega veerge, mis mõnikord kasutavad tulemite saamiseks Accessi funktsioone. Kui migreerite päringuid SQL serverisse, peate Accessi funktsiooni asendama samaväärse TSQL-i funktsiooniga (kui see on saadaval). luua arvutatava veeru. TSQL-il on palju funktsioone ja saadaolevate funktsioonide vaatamine on teie huvides. Lisateavet leiate teemast SQL- andmebaasi funktsioonid.
Järgmises tabelis on näidatud, millisel Accessi funktsioonil on olemas vastav TSQL-i funktsioon.
|
Accessi kategooria |
Accessi funktsioon |
Funktsioon TSQL |
|
Teisendamine |
||
|
Teisendamine |
||
|
Teisendamine |
||
|
Teisendamine |
||
|
Teisendamine |
||
|
Teisendamine |
||
|
Kuupäev/kellaaeg |
||
|
Kuupäev/kellaaeg |
||
|
Kuupäev/kellaaeg |
||
|
Kuupäev/kellaaeg |
||
|
Kuupäev/kellaaeg |
||
|
Kuupäev/kellaaeg |
||
|
Kuupäev/kellaaeg |
||
|
Kuupäev/kellaaeg |
||
|
Kuupäev/kellaaeg |
||
|
Kuupäev/kellaaeg |
||
|
Kuupäev/kellaaeg |
||
|
Kuupäev/kellaaeg |
||
|
Kuupäev/kellaaeg |
||
|
Kuupäev/kellaaeg |
||
|
Kuupäev/kellaaeg |
||
|
Domeeni kokkuvõtt |
||
|
Matemaatika |
||
|
Matemaatika |
||
|
Matemaatika |
||
|
Matemaatika |
||
|
Matemaatika |
||
|
Matemaatika |
||
|
Matemaatika |
||
|
Matemaatika |
||
|
Matemaatika |
||
|
Matemaatika |
||
|
Matemaatika |
||
|
Programmivoog |
||
|
Programmivoog |
||
|
Statistika |
||
|
SQL Aggregate |
||
|
SQL Aggregate |
||
|
SQL-i kokkuvõtt |
||
|
SQL-i kokkuvõtt |
||
|
SQL-i kokkuvõtt |
||
|
Tekst |
||
|
Tekst |
||
|
Tekst |
||
|
Tekst |
||
|
Tekst |
||
|
Tekst |
||
|
Tekst |
||
|
Tekst |
||
|
Tekst |