Sammenligne Access SQL med SQL Server TSQL

Gjelder for
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Hvis du overfører Access-dataene til SQL Server eller du oppretter en Access-løsning med SQL Server som bakdatabase, er det viktig at du vet forskjellene mellom Access SQL og SQL Server Transact SQL (TSQL). Nedenfor finner du de viktigste variasjonene du må vite om, slik at løsningene fungerer som de skal.

Hvis du vil ha mer informasjon, kan du se Access SQL: grunnleggende konsepter, vokabular og syntaks og Transact-SQL-referanse.

Forskjeller i syntaks og uttrykk

Det finnes noen forskjeller i syntaks og uttrykk som krever konvertering. Tabellen nedenfor oppsummerer de vanligste.

Forskjell Access SQL SQL Server TSQL
Relasjonsdatabaseattributt Vanligvis kalt et felt Vanligvis kalt en kolonne
Strenglitteral Anførselstegn ("), som for eksempel "Mary Q. Contrary" Apostrof ('), som for eksempel 'Mary Q. Contrary'
Datolitteraler Nummertegn (#), for eksempel #1/1/2019# Apostrof ('), for eksempel '1/1/2019'
Flere jokertegn Stjerne (*), for eksempel "Cath*" Prosent (%), for eksempel 'Cath%'
Enkelt jokertegn Spørsmålstegn (?), for eksempel "Cath?" Understrekingstegn (_), for eksempel "Cath_"
Modulo-operator MOD, som for eksempel Verdi1 MOD Verdi2 Prosent (%), som for eksempel Verdi1 % Verdi2
Boolske verdier WHERE-bitverdien = [Sann] | [Usann]
Eller
WHERE-bitverdien = [-1 | 0]
WHERE-bitverdien = [1 | 0]
Parametere [<Et navn som ikke er en definert kolonne>]
Eller
Bruk SQL-parameterdeklarasjonen i SQL-visning
@ParamName

Obs!

  • Access bruker anførselstegn (") rundt tabellnavn og -objekter. T-SQL kan bruke dem til tabellnavn med mellomrom, men dette er ikke standard navngivingspraksis. I de fleste tilfeller bør objektnavn gis nytt navn uten mellomrom, men spørringer må også skrives på nytt for å gjenspeile nye tabellnavn. Bruk hakeparenteser [ ] for tabeller som ikke kan få nytt navn, men som ikke er i samsvar med navnestandarder. Access legger også til ekstra parenteser rundt parameterne i spørringer, men de kan fjernes i T-SQL.

  • Vurder å bruke det kanoniske datoformatet, åååå-mm-dd hh:mm:ss, som er en ODBC-standard for datoer som er lagret som tegn og en konsekvent metode for å representere dem på tvers av databaser, samtidig som det bevarer sorteringsrekkefølgen for datoen.

  • For å unngå forvirring når du sammenligner boolske verdier, kan du bruke følgende sammenligning for Access og SQL Server:

    • Test for usann verdi WHERE-bitverdi = 0
    • Test for sann verdi WHERE-bitverdi <> 0

Nullverdier

En nullverdi er ikke et tomt felt som betyr «ingen verdi i det hele tatt». En nullverdi er en plassholder som betyr at data mangler eller er ukjent. Databasesystemer som gjenkjenner nullverdier implementerer «treverdilogikk», noe som betyr at noe kan være sant, usant eller ukjent. Hvis du ikke håndterer nullverdier riktig, kan du få uriktige resultater når du foretar likhetssammenligninger eller evaluerer WHERE-setninger. Her er en sammenligning av hvordan Access og SQL Server behandler nullverdier.

Deaktivere nullverdier i en tabell

I Access og SQL Server er nullverdier aktivert som standard. Hvis du vil deaktivere nullverdier i en tabellkolonne, gjør du følgende:

  • I Access setter du egenskapen Obligatorisk for et felt til Ja.
  • I SQL Server legger du ikke NULL-attributtet til en kolonne i en OPPRETT TABELL-setning.

Test for nullverdier i en WHERE-setningsdel

Bruk sammenligningspredikatene NULL og IS NOT NULL:

  • Bruk IS NULL eller IS NOT NULL i Access. Eksempel:

    SELECT … WHERE column IS NULL.
    
  • Bruk IS NULL eller IS NOT NULL i SQL Server. Eksempel:

    SELECT … WHERE field IS NULL
    

Konverter NULL-verdier med funksjoner

Bruk NULL-funksjonene til å beskytte uttrykk og returnere alternative verdier:

  • I Access bruker du NZ-funksjonen (verdi, [verdihvisnull]) som returnerer 0 eller en annen verdi. Eksempel:

    SELECT AVG (NZ (Weight, 50) ) FROM Product
    
  • I SQL Server bruker du ISNULL-funksjonen (verdi, erstatningsverdi) som returnerer 0 eller en annen verdi. Eksempel:

    SELECT AVG (ISNULL (Weight, 50)) FROM Product
    

Forstå databasealternativer

Noen databasesystemer har proprietære mekanismer:

  • Det finnes ingen databasealternativer som gjelder NULL i Access.
  • I SQL Server kan du bruke alternativet SET ANSI_NULLS OFF for direkte likhetssammenligninger med NULL ved hjelp av = og <> operatorer. Vi anbefaler at du unngår å bruke dette alternativet fordi det er avskrevet, og det kan forvirre andre som bruker ISO-kompatibel nullhåndtering.

Omregning og endring

Når du arbeider med data eller programmering, har du ofte behov for å konvertere én datatype til en annen. Prosessen med å konvertere kan være enkel eller kompleks. Vanlige problemer som du trenger å tenke på, er implisitt eller eksplisitt konvertering, regionale innstillinger for gjeldende dato og klokkeslett, avrunding eller avkorting av tall, og datatypestørrelser. Det finnes ingen erstatning for grundig testing og bekreftelse av resultatene.

I Access bruker du de elleve typekonverteringsfunksjonene som begynner med bokstaven C, én for hver datatype. Hvis du for eksempel vil konvertere et flyttall til en streng:


CStr(437.324) returns the string "437.324".

I SQL Server bruker du hovedsakelig FUNKSJONENE CAST og CONVERT TSQL, selv om det finnes andre konverteringsfunksjoner for spesialiserte behov. Hvis du for eksempel vil konvertere et flyttall til en streng:


CONVERT(TEXT, 437.324) returns the string "437.324"

Funksjonene DateAdd, DateDiff og DatePart

Disse vanlige datofunksjonene (DateAdd, DateDiff og DatePart) ligner i Access og TSQL, men bruken av det første argumentet er forskjellig.

  • I Access kalles det første argumentet intervallet, og det er et strenguttrykk som krever anførselstegn.

  • I SQL Server kalles det første argumentet datodelen, og det bruker nøkkelordverdier som ikke krever anførselstegn.

    Komponent Access SQL Server
    År "yyyy" year, yy, yyyy
    Kvartal "q" quarter, qq, q
    Måned "m" month, mm, m
    Dag i året "y" dayofyear, dy, y
    Dag "d" day, dd, d
    Uke "ww" wk, ww
    Dag i uke "w" weekday, dw
    Time "h" hour, hh
    Minutt "n" minute, mi, n
    Sekund "s" second, ss, s
    Millisekund millisecond, ms

Sammenligning av funksjoner

Access-spørringer kan inneholde beregnede kolonner som av og til bruker Access-funksjoner til å få resultater. Når du overfører spørringer til SQL Server, må du erstatte Access-funksjonen med en tilsvarende TSQL-funksjon hvis den er tilgjengelig. Hvis det ikke finnes en tilsvarende TSQL-funksjon, kan du vanligvis opprette en beregnet kolonne (TSQL-termen som brukes for en beregnet kolonne) for å gjøre det du vil. TSQL har en rekke funksjoner, og det er til din fordel å se hva som er tilgjengelig. Hvis du vil ha mer informasjon, kan du se Hva er SQL-databasefunksjonene?.

Tabellen nedenfor viser hvilke Access-funksjoner som har en tilsvarende TSQL-funksjon.

Access-kategori Access-funksjonen TSQL-funksjon
Konvertering Chr-funksjon CHAR
Konvertering Day-funksjon DAG
Konvertering FormatNumber-funksjon FORMAT
Konvertering FormatPercent-funksjon FORMAT
Konvertering Str-funksjon STR
Konvertering Type konverteringsfunksjoner CAST og KONVERTER
Dato/tid Datofunksjon CURRENT_TIMESTAMP
Dato/tid Day-funksjon DATEFROMPARTS
Dato/tid DateAdd- funksjon DATEADD
Dato/tid DateDiff-funksjon DATEDIFF
DATEDIFF_BIG
Dato/tid DatePart-funksjon DATEPART
Dato/tid DateSerial-funksjon DATEFROMPARTS
Dato/tid DateValue-funksjon DATENAME
Dato/tid Hour-funksjon TIMEFROMPARTS
Dato/tid Minute-funksjon TIMEFROMPARTS
Dato/tid Month-funksjon MÅNED
Dato/tid Now-funksjon SYSDATETIME
Dato/tid Second-funksjon TIMEFROMPARTS
Time, funksjon TIMEFROMPARTS
Dato/tid TimeSerial-funksjon TIMEFROMPARTS
Dato/tid Weekday-funksjon DATEPART
DATENAME
Dato/tid Year-funksjon ÅR
DATEFROMPARTS
Domain Aggregate DFirst- og DLast-funksjon FIRST_VALUE
LAST_VALUE
Matematikk Abs-funksjon ABS
Matematikk Atn-funksjon ATAN
ATN2
Matematikk Cos-funksjon COS
ACOS
Matematikk Exp-funksjon EKSP
Matematikk Int- og Fix-funksjon FLOOR
Matematikk Log-funksjon LOG
LOG10
Matematikk Rnd-funksjon RAND
Matematikk Round-funksjon AVRUND
Matematikk Sgn-funksjon SIGN
Matematikk Sin-funksjon SIN
Matematikk Sqr-funksjon ROT
Programflyt Choose-funksjon VELG
Programflyt IIf-funksjon IIF
Statistisk Avg-funksjon AVG
SQL aggregat Count-funksjon ANTALL
COUNT_BIG
SQL aggregat Min- og Max-funksjon MIN
MAKS
SQL aggregat StDev- og StDevP-funksjon STDAV
STDAVP
SQL aggregat Sum-funksjon SUMMER
SQL aggregat Var- og VarP-funksjon VARIANS
VARIANSP
Tekst Format-funksjon FORMAT
Tekst LCase-funksjon LOWER
Tekst Left-funksjon VENSTRE
Tekst Len-funksjon LEN
Tekst LTrim-, RTrim- og Trim-funksjon TRIM
LTRIM
RTRIM
Tekst Replace-funksjon ERSTATTE
Tekst Right-funksjon HØYRE
Tekst StrReverse-funksjon OMVENDT
Tekst UCase-funksjon UPPER