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 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 finde flere oplysninger i Access SQL: grundlæggende begreber, terminologi og syntaks samt 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
Brug SQL Parameters-erklæringen i SQL-visning
@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 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 indstillingen SET ANSI_NULLS OFF til at få direkte lighedssammenligninger af 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 grundige 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 bruger du primært funktionerne CAST og CONVERT 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 for 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 (TSQL-udtrykket brugt for en beregnet kolonne) til 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 finde flere oplysninger i 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 FORMATER
Konvertering Funktionen FormatPercent FORMATER
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 DATODEL
Dato/klokkeslæt Funktionen DateSerial DATEFROMPARTS
Dato/klokkeslæt Funktionen DateValue DATENAME
Dato/klokkeslæt Funktionen Hour TIMEFROMPARTS
Dato/klokkeslæt Funktionen Minute TIMEFROMPARTS
Dato/klokkeslæt Funktionen Month MONTH
Dato/klokkeslæt Funktionen Now SYSDATETIME
Dato/klokkeslæt Funktionen Second TIMEFROMPARTS
Funktionen Time TIMEFROMPARTS
Dato/klokkeslæt Funktionen TimeSerial TIMEFROMPARTS
Dato/klokkeslæt Funktionen Weekday DATODEL
DATENAME
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 GNS
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 FORMATER
Tekst Funktionen LCase LOWER
Tekst Funktionen Left VENSTRE
Tekst Funktionen Len LÆNGDE
Tekst Funktionerne LTrim, RTrim og Trim TRIM
LTRIM
RTRIM
Tekst Funktionen Replace ERSTAT
Tekst Funktionen Right HØJRE
Tekst Funktionen StrReverse OMVENDT
Tekst Funktionen UCase UPPER