Hvis du overfører dine Access-data til SQL Server, eller hvis du opretter en Access-løsning med SQL Server som back-end-databasen, er det vigtigt, at du kender til forskellene mellem Access SQL og SQL Server TSQL (Transact-SQL) Det følgende viser de vigtigste forskelle, du skal kende til for at sikre, at din løsning fungerer efter hensigten.
Du kan få flere oplysninger ved at se Access SQL: grundlæggende begreber, terminologi og syntaks og Transact-SQL-nøglebegreber.
Forskelle i syntaks og udtryk
Der er et par forskelle i syntaks og udtryk, der kræver konvertering. Følgende tabel viser en oversigt over de mest almindelige forskelle.
Forskelle |
Access SQL |
SQL Server TSQL |
Attribut i relationsdatabase |
Kaldes normalt et felt |
Kaldes normalt en kolonne |
Strengkonstanter |
Anførselstegn ("), f.eks."Mary Q" |
Apostrof ("), f.eks.'Mary Q' |
Datokonstanter |
Nummertegn (#), som f.eks #01-01-2019# |
Apostrof ('), som f.eks. '01-01-2019' |
Flere jokertegn |
Stjerne (*), som f.eks. "Cath" |
Procent (%), som f.eks. 'Cath%' |
Et enkelt jokertegn |
Spørgsmålstegn (?), som f.eks. "Cath?" |
Understregningstegn (_), som f.eks. "Cath_" |
Modulusoperator |
Modulusoperator, som f.eks Værdi1 MOD Værdi2 |
Procent (%), som f.eks. Værdi1 % Værdi2 |
Booleske værdier |
WHERE-bitværdi = [Sand | Falsk] Eller WHERE-bitværdi = [-1 | 0] |
WHERE-bitværdi= [1 | 0] |
Parametre |
[<Et navn, der ikke er en defineret kolonne>] Eller Brug SQL PARAMETERS-erklæringen i SQL-visning |
@ParamNavn |
Noter
-
Access bruger anførselstegn (") omkring tabelnavne og objekter. I T-SQL kan de bruges til tabelnavne med mellemrum, men dette er ikke standardfremgangsmåden for navngivning. I de fleste tilfælde skal objektnavne omdøbes uden mellemrum, men forespørgsler skal også omskrives for at afspejle de nye tabelnavne. Brug kantede parenteser [ ] med tabeller, der ikke kan omdøbes, men som ikke stemmer overens med navngivningsstandarder. I Access tilføjes der også ekstra parenteser omkring parametrene i forespørgsler, men de kan fjernes i T-SQL.
-
Overvej at bruge det vedtagne datoformat, åååå-mm-dd tt:mm:ss, hvilket er en ODBC-standard for datoer, der er gemt som tegn, og giver en ensartet måde at repræsentere dem på tværs af databaser samtidigt med at bevare datoens sorteringsrækkefølge.
-
For at undgå forvirring under sammenligning af booleske værdier kan du bruge følgende sammenligning af Access og SQL Server:
-
Test til falsk værdi WHERE-bitværdi = 0
-
Test til sand værdi WHERE-bitværdi <> 0
-
Null-værdier
En null-værdi er ikke et tomt felt, der betyder "slet ingen værdi". En null-værdi er en pladsholder, der angiver, at dataene mangler eller er ukendte. Databasesystemer, der genkender null-værdier, bruger "tredimensionel logik", hvilket betyder, at noget kan være sandt, falsk eller ukendt. Hvis du ikke håndterer null-værdier korrekt, kan du få forkerte resultater, når du laver lighedssammenligninger eller vurderer WHERE-delsætninger. Det følgende sammenligner, hvordan Access og SQL Server håndterer null-værdier.
Deaktiver null-værdier i en tabel
I Access og SQL Server er null-værdier som standard aktiveret. Hvis du vil deaktivere null-værdier i en tabelkolonne, skal du gøre følgende:
-
I Access skal du indstille et felts Obligatorisk-egenskab til Ja.
-
I SQL Server skal du føje attributten IS NOT NULL til en kolonne i en OPRET TABEL-sætning.
Test for null-værdier i en WHERE-delsætning
Brug sammenligningsprædikaterne IS NULL og IS NOT NULL:
-
I Access skal du bruge IS NULL eller IS NOT NULL. For eksempel:
SELECT … WHERE column IS NULL.
-
I SQL Server skal du bruge IS NULL eller IS NOT NULL. For eksempel:
SELECT … WHERE field IS NULL
Konvertér null-værdier med funktioner
Brug null-funktionerne til at beskytte dine udtryk og returnere alternative værdier:
-
I Access skal du bruge funktionen NZ(value, [valueifnull]), som returnerer 0 eller en anden værdi. For eksempel:
SELECT AVG (NZ (Weight, 50) ) FROM Product
-
I SQL Server skal du bruge funktionen ISNULL(Value, replacement_value), som returnerer 0 eller en anden værdi. For eksempel:
SELECT AVG (ISNULL (Weight, 50)) FROM Product
Forstå databaseindstillinger
Nogle databasesystemer har egenudviklede mekanismer:
-
I Access er der ingen relevante databaseindstillinger for null-værdier.
-
I SQL Server kan du bruge SET ANSI_NULLS OFF til at få direkte lighedssammenligninger af NULL-værdier ved at bruge operatorerne = og <>. Vi anbefaler, at du undlader at bruge denne mulighed, fordi den er frarådet, og fordi den kan være til besvær for andre, der afhænger af ISO-kompatibel håndtering af null-værdier.
Konvertering og tvungen konvertering
Når du arbejder med data eller programmering, er der konstant behov for at konvertere fra én datatype til en anden datatype. Konverteringsprocessen kan være enkel eller kompleks. De mest almindelige problemer, du skal tænke over, er: implicit eller eksplicit konvertering, de aktuelle indstillinger for dato og klokkeslæt, afrunding eller afkortning af tal samt størrelser på datatyper. Der er ingen erstatning for dybtgående tests og bekræftelse af dine resultater.
I Access skal du bruge de elleve Typekonverteringsfunktioner, der begynder med bogstavet C – én for hver datatype. Hvis du f.eks. vil konvertere et flydende punkttal til en streng:
CStr(437.324) returns the string "437.324".
I SQL Server skal du primært bruge TSQL-funktionerne CAST og CONVERT, selvom der er andre konverteringsfunktioner til specifikke behov. Hvis du f.eks. vil konvertere et flydende punkttal til en streng:
CONVERT(TEXT, 437.324) returns the string "437.324"
Funktionerne DateAdd, DateDiff og DatePart
Disse ofte anvendte datofunktioner ligner hinanden (DateAdd, DateDiff og DatePart) i Access og TSQL, men det første argument er anderledes.
-
I Access kaldes det første argument intervallet, og det er et strengudtryk, der kræver anførselstegn.
-
I SQL Server kaldes det første argument DatePart, og det bruger nøgleordsværdier, der ikke kræver anførselstegn.
Komponent
Access
SQL Server
År
"åååå"
år, åå, åååå
Kvartal
"kv"
kvartal, kv, k
Måned
"m"
måned, mm, m
Dag i året
"å"
Dagiåret, då, å
Dag
"d"
dag, dd, d
Uge
"uu"
uge, uu
Ugedag
"u"
ugedag, ud
Time
"t"
time, tt
Minut
"n"
minut, min., m
Sekund
"s"
sekund, ss, s
Millisekund
millisekund, ms
Sammenligning af funktioner
Access-forespørgsler kan indeholde beregnede kolonner, der nogle gange bruger Access-funktioner til at få resultater. Når du overfører forespørgsler til SQL Server, skal du erstatte Access-funktionen med en tilsvarende TSQL-funktion, hvis der er én. Hvis der ikke er nogen tilsvarende TSQL-funktion, så kan du som regel oprette en beregnet kolonne for at gøre det, du ønsker. TSQL har et bredt udvalg af funktioner, og du kan drage nytte af at se, hvad der er tilgængeligt. Du kan få flere oplysninger ved at se Hvad er SQL-databasefunktionerne?.
Følgende tabel viser, hvilken Access-funktion der har en tilsvarende TSQL-funktion.
Access-kategori |
Access-funktion |
TSQL-funktion |
Konvertering |
||
Konvertering |
||
Konvertering |
||
Konvertering |
||
Konvertering |
||
Konvertering |
||
Dato/klokkeslæt |
||
Dato/klokkeslæt |
||
Dato/klokkeslæt |
||
Dato/klokkeslæt |
||
Dato/klokkeslæt |
||
Dato/klokkeslæt |
||
Dato/klokkeslæt |
||
Dato/klokkeslæt |
||
Dato/klokkeslæt |
||
Dato/klokkeslæt |
||
Dato/klokkeslæt |
||
Dato/klokkeslæt |
||
Dato/klokkeslæt |
||
Dato/klokkeslæt |
||
Dato/klokkeslæt |
||
Domæneaggregat |
||
Matematik |
||
Matematik |
||
Matematik |
||
Matematik |
||
Matematik |
||
Matematik |
||
Matematik |
||
Matematik |
||
Matematik |
||
Matematik |
||
Matematik |
||
Programflow |
||
Programflow |
||
Statistisk |
||
SQL-aggregat |
||
SQL-aggregat |
||
SQL-aggregat |
||
SQL-aggregat |
||
SQL-aggregat |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |