Access SQL-i ja SQL Server TSQL-i võrdlus

Rakenduskoht
Microsoft 365 rakendus Access Access 2024 Access 2021 Access 2019 Access 2016

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 [<Nimi, mis pole määratletud veerg>]
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äära väärtuse testimine WHERE Bitvalue = 0
    • Tõese väärtuse 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 Server saate kasutada suvandit SET ANSI_NULLS OFF, et võrrelda nulliga otsest võrdlemist tehtemärkide = ja <> tehtemärkide 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 Server kasutate peamiselt funktsioone CAST ja CONVERT TSQL, kuigi on ka muid erivajadustega teisendusfunktsioone. 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). Kui vastavat TSQL-funktsiooni pole, saate tavaliselt luua arvutatud veeru (arvutatud veeru jaoks kasutatav TSQL-i termin), et teha soovitud toiminguid. TSQL-il on palju funktsioone ja saadaolevate funktsioonide vaatamine on teie huvides. Lisateavet leiate teemast Mis on 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 Funktsioon Chr CHAR
Teisendamine Funktsioon Day PÄEV
Teisendamine Funktsioon FormatNumber FORMAAT
Teisendamine Funktsioon FormatPercent FORMAAT
Teisendamine Funktsioon Str STR
Teisendamine Tüübiteisendusfunktsioonid CAST ja CONVERT
Kuupäev/kellaaeg Funktsioon Date CURRENT_TIMESTAMP
Kuupäev/kellaaeg Funktsioon Day DATEFROMPARTS
Kuupäev/kellaaeg Funktsioon DateAdd DATEADD
Kuupäev/kellaaeg Funktsioon DateDiff DATEDIFF
DATEDIFF_BIG
Kuupäev/kellaaeg Funktsioon DatePart DATEPART
Kuupäev/kellaaeg Funktsioon DateSerial DATEFROMPARTS
Kuupäev/kellaaeg Funktsioon DateValue DATENAME (KUUPÄEVA NIMI)
Kuupäev/kellaaeg Funktsioon Hour TIMEFROMPARTS
Kuupäev/kellaaeg Funktsioon Minute TIMEFROMPARTS
Kuupäev/kellaaeg Funktsioon Month KUU
Kuupäev/kellaaeg Funktsioon Now SYSDATETIME
Kuupäev/kellaaeg Funktsioon Second TIMEFROMPARTS
Funktsioon Time TIMEFROMPARTS
Kuupäev/kellaaeg Funktsioon TimeSerial TIMEFROMPARTS
Kuupäev/kellaaeg Funktsioon Weekday DATEPART
DATENAME (KUUPÄEVA NIMI)
Kuupäev/kellaaeg Funktsioon Year AASTA
DATEFROMPARTS
Domeeni kokkuvõtt Funktsioonid DFirst ja DLast FIRST_VALUE
LAST_VALUE
Matemaatika Funktsioon Abs ABS
Matemaatika Funktsioon Atn ATAN
ATN2
Matemaatika Funktsioon Cos COS
ACOS
Matemaatika Funktsioon Exp EXP
Matemaatika Funktsioonid Int ja Fix FLOOR
Matemaatika Funktsioon LOG LOG
LOG10
Matemaatika Funktsioon Rnd RAND
Matemaatika Funktsioon Round ROUND
Matemaatika Funktsioon Sgn SIGN
Matemaatika Funktsioon Sin SIN
Matemaatika Funktsioon Sqr SQRT
Programmivoog Funktsioon Choose CHOOSE
Programmivoog Funktsioon IIf IIF
Statistika Funktsioon Avg KESKMISE
SQL-i kokkuvõtt Funktsioon Count COUNT
COUNT_BIG
SQL-i kokkuvõtt Funktsioonid Min ja Max MIN
MAX
SQL-i kokkuvõtt Funktsioonid StDev ja StDevP STDEV
STDEVP
SQL-i kokkuvõtt Funktsioon Sum SUM
SQL-i kokkuvõtt Funktsioonid Var ja VarP VAR
VARP
Text (Tekst) Funktsioon Format FORMAAT
Text (Tekst) Funktsioon LCase LOWER
Text (Tekst) Funktsioon Left VASAK
Text (Tekst) Funktsioon Len LEN
Text (Tekst) Funktsioonid LTrim, RTrim ja Trim TRIM
LTRIM
RTRIM
Text (Tekst) Funktsioon Replace ASENDADA
Text (Tekst) Funktsioon Right ÕIGE
Text (Tekst) Funktsioon StrReverse VASTUPIDINE
Text (Tekst) Funktsioon UCase UPPER