Sammenligning af Access SQL og SQL Server TSQL
Applies ToAccess 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 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

Funktionen Char

CHAR

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

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

DATEPART

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

ATAN

ATN2

Matematik

Funktionen Cos

COS

ACOS

Matematik

Funktionen Exp

EXP

Matematik

Funktionerne Int og Fix

FLOOR

Matematik

Funktionen LOG

Log

LOG10

Matematik

Funktionen Rnd

RAND

Matematik

Funktionen Round

ROUND

Matematik

Funktionen Sgn

SIGN

Matematik

Funktionen Sin

SIN

Matematik

Funktionen Sqr

SQRT

Programflow

Funktionen Choose

CHOOSE

Programflow

Funktionen IIf

IIF

Statistisk

Funktionen Avg

AVG

SQL-aggregat

Funktionen Count

COUNT

COUNT_BIG

SQL-aggregat

Funktionerne Min og Max

MIN

MAX

SQL-aggregat

Funktionerne StDev og StDevP

STDEV

STDEVP

SQL-aggregat

Funktionen Sum

SUM

SQL-aggregat

Funktionerne Var og VarP

VAR

VARP

Tekst

Funktionen Format

FORMAT

Tekst

Funktionen LCase

LOWER

Tekst

Funktionen Left

LEFT

Tekst

Funktionen Len

LEN

Tekst

Funktionerne LTrim, RTrim og Trim

TRIM

LTRIM

RTRIM

Tekst

Funktionen Replace

REPLACE

Tekst

Funktionen Right

RIGHT

Tekst

Funktionen StrReverse

REVERSE

Tekst

Funktionen UCase

Upper

Har du brug for mere hjælp?

Vil du have flere indstillinger?

Udforsk abonnementsfordele, gennemse kurser, få mere at vide om, hvordan du sikrer din enhed og meget mere.

Communities hjælper dig med at stille og besvare spørgsmål, give feedback og høre fra eksperter med omfattende viden.