Sammenligning af Access SQL og SQL Server TSQL

Gælder for
Access til Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Hvis du overfører dine Access-data til SQL Server, eller du opretter en Access-løsning med SQL Server som back end-database, er det vigtigt, at du kender forskellene mellem Access SQL og SQL Server Transact SQL (TSQL). Det følgende viser de vigtigste forskelle, du skal kende til for at sikre, at din løsning fungerer efter hensigten.

Du kan finde flere oplysninger i Access SQL: grundlæggende begreber, terminologi og syntaks og Transact-SQL-reference.

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
I SQL-visning skal du bruge SQL Parameters Declaration
@ParamName

Bemærkninger

  • 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 for falsk værdi WHERE-bitværdi = 0
    • Test for sand værdi WHERE-bitværdi <> 0

Null-værdier

En null-værdi er ikke et tomt felt, der betyder "ingen værdi overhovedet". En null-værdi er en pladsholder, der angiver, at dataene mangler eller er ukendte. Databasesystemer, der genkender null-værdier, implementerer "treværdid 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 foretager lighedssammenligninger eller evaluerer 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 indstillingen SET ANSI_NULLS OFF til direkte lighedssammenligninger med NULL ved hjælp af 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 grundig test 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 bruger du primært funktionerne CAST og KONVERTER TSQL, selvom der er andre konverteringsfunktioner til særlige 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, kan du normalt oprette en beregnet kolonne (det TSQL-udtryk, der bruges til en beregnet kolonne) for at gøre det, du ønsker. TSQL har en lang række funktioner, og det er til din fordel at se, hvad der er tilgængeligt. Du kan få mere at vide under Hvad er SQL-databasefunktionerne?.

Følgende tabel viser, hvilken Access-funktion der har en tilsvarende TSQL-funktion.

Access-kategori Access-funktion TSQL-funktion
Konvertering Funktionen Char TEGN
Konvertering Funktionen Day DAY
Konvertering Funktionen FormatNumber FORMAT
Konvertering Funktionen FormatPercent FORMAT
Konvertering Funktionen Str STR
Konvertering Typekonverteringsfunktioner CAST og CONVERT
Dato/klokkeslæt Funktionen Dato CURRENT_TIMESTAMP
Dato/klokkeslæt Funktionen Day DATEFROMPARTS
Dato/klokkeslæt Funktionen DateAdd DATEADD
Dato/klokkeslæt Funktionen DateDiff DATEDIFF
DATEDIFF_BIG
Dato/klokkeslæt Funktionen DatePart DATEPART
Dato/klokkeslæt Funktionen DateSerial DATEFROMPARTS
Dato/klokkeslæt Funktionen DateValue DATONAVN
Dato/klokkeslæt Funktionen Hour TIDFRAPARTER
Dato/klokkeslæt Funktionen Minute TIDFRAPARTER
Dato/klokkeslæt Funktionen Month MONTH
Dato/klokkeslæt Funktionen Now SYSDATETIME
Dato/klokkeslæt Funktionen Second TIDFRAPARTER
Funktionen Time TIDFRAPARTER
Dato/klokkeslæt Funktionen TimeSerial TIDFRAPARTER
Dato/klokkeslæt Funktionen Weekday DATEPART
DATONAVN
Dato/klokkeslæt Funktionen Year YEAR
DATEFROMPARTS
Domæneaggregat Funktionerne DFirst og DLast FIRST_VALUE
LAST_VALUE
Matematik Funktionen Abs ABS
Matematik Funktionen Atn ARCTAN
ATN2
Matematik Funktionen Cos COS
ARCCOS
Matematik Funktionen Exp EKSP
Matematik Funktionerne Int og Fix AFRUND.GULV
Matematik Funktionen LOG LOG
LOG10
Matematik Funktionen Rnd SLUMP
Matematik Funktionen Round AFRUND
Matematik Funktionen Sgn FORTEGN
Matematik Funktionen Sin SIN
Matematik Funktionen Sqr KVROD
Programflow Funktionen Choose VÆLG
Programflow Funktionen IIf IIF
Statistisk Funktionen Avg AVG
SQL-aggregat Funktionen Count TÆL
COUNT_BIG
SQL-aggregat Funktionerne Min og Max MIN
MAKS
SQL-aggregat Funktionerne StDev og StDevP STDAFV
STDAFVP
SQL-aggregat Funktionen Sum SUM
SQL-aggregat Funktionerne Var og VarP VARIANS
VARIANSP
Tekst Funktionen Format FORMAT
Tekst Funktionen LCase LOWER
Tekst Funktionen Left VENSTRE
Tekst Funktionen Len LEN
Tekst Funktionerne LTrim, RTrim og Trim TRIM
LTRIM
RTRIM
Tekst Funktionen Replace ERSTATTE
Tekst Funktionen Right HØJRE
Tekst Funktionen StrReverse OMVENDT
Tekst Funktionen UCase UPPER