Kui migreerite Accessi andmeid SQL Serverisse või loote SQL Serveriga tagaandmebaasiks Accessi lahendust, peate teadma, kuidas Access SQL ja SQL Server Transact SQL (TSQL) erinevad. 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-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
Nullväärtus pole tühi väli, mille puhul väärtust polegi. Nullväärtus on kohatäide, mis viitab sellele, et andmed puuduvad või need on teadmata. Andmebaasid, mis tuvastavad nullväärtused, kasutavad nn kolme väärtuse loogikat, mis tähendab, et asjad saavad olla kas tõesed (TRUE), väärad (FALSE) või teadmata (UNKNOWN). Kui te ei arvesta nullväärtusi õigel moel, võite saada 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õhjalikule katsetamisele ja tulemuste kinnitamisele alternatiivi pole.
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 on esimese argumendi nimetus intervall. See on stringavaldis, mis nõuab jutumärke.
-
SQL Serveris on esimese argumendi nimi datepart. See kasutab märksõnalisi väärtusi, mille puhul jutumärke pole vaja.
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. Tutvuge nendega ja vaadake, millistest võiksite kasu lõigata. 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 |