Sammenligne Access SQL med SQL Server TSQL
Applies ToAccess for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Hvis du overfører Access-dataene til SQL Server eller oppretter en Access-løsning med SQL Server som bakdatabase, er det viktig at du kjenner 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 begreper, 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

I SQL-visning bruker du SQL-parameterdeklarasjonen

@ParamName

Notater   

  • 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-bitverdien = 0

    • Test for sann verdi    WHERE-bitverdien <> 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 «tredelt logikk», noe som betyr at en verdi kan være sann, usann eller ukjent. Hvis du ikke behandler nullverdier riktig, kan du få feil resultater når du lager likhetssammenligninger eller vurderer 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 sammenligning av direkte likheter med NULL ved bruk av operatorene = og < >. 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. Ingenting kan erstatte at du tester grundig og bekrefter 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 TSQL-funksjonene CAST og CONVERT, selv om det er andre konverteringsfunksjoner for spesielle 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 intervall, og det er et strenguttrykk som krever anførselstegn.

  • I SQL Server kalles det første argumentet DatePart, og 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 noen tilsvarende TSQL-funksjon, kan du vanligvis opprette en beregnet kolonne (TSQL-termen som brukes for en beregnet kolonne) til å gjøre det du ønsker. TSQL har en rekke funksjoner, og det er nyttig for deg å se hva som er tilgjengelig. Hvis du vil ha mer informasjon, kan du se Hva er funksjonene for SQL-databaser?.

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

DAY

Konvertering

FormatNumber-funksjon

FORMAT

Konvertering

FormatPercent-funksjon

FORMAT

Konvertering

Str-funksjon

STR

Konvertering

Type konverteringsfunksjoner

CAST og CONVERT

Dato/klokkeslett

Datofunksjon

CURRENT_TIMESTAMP

Dato/klokkeslett

Day-funksjon

DATEFROMPARTS

Dato/klokkeslett

DateAdd- funksjon

DATEADD

Dato/klokkeslett

DateDiff-funksjon

DATEDIFF

DATEDIFF_BIG

Dato/klokkeslett

DatePart-funksjon

DATEPART

Dato/klokkeslett

DateSerial-funksjon

DATEFROMPARTS

Dato/klokkeslett

DateValue-funksjon

DATENAME

Dato/klokkeslett

Hour-funksjon

TIMEFROMPARTS

Dato/klokkeslett

Minute-funksjon

TIMEFROMPARTS

Dato/klokkeslett

Month-funksjon

MONTH

Dato/klokkeslett

Now-funksjon

SYSDATETIME

Dato/klokkeslett

Second-funksjon

TIMEFROMPARTS

Time-funksjon

TIMEFROMPARTS

Dato/klokkeslett

TimeSerial-funksjon

TIMEFROMPARTS

Dato/klokkeslett

Weekday-funksjon

DATEPART

DATENAME

Dato/klokkeslett

Year-funksjon

YEAR

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

EXP

Matematikk

Int- og Fix-funksjon

FLOOR

Matematikk

Log-funksjon

LOG

LOG10

Matematikk

Rnd-funksjon

RAND

Matematikk

Round-funksjon

ROUND

Matematikk

Sgn-funksjon

SIGN

Matematikk

Sin-funksjon

SIN

Matematikk

Sqr-funksjon

SQRT

Programflyt

Choose-funksjon

CHOOSE

Programflyt

IIf-funksjon

IIF

Statistisk

Avg-funksjon

AVG

SQL aggregat

Count-funksjon

COUNT

COUNT_BIG

SQL aggregat

Min- og Max-funksjon

MIN

MAX

SQL aggregat

StDev- og StDevP-funksjon

STDEV

STDEVP

SQL aggregat

Sum-funksjon

SUM

SQL aggregat

Var- og VarP-funksjon

VAR

VARP

Tekst

Format-funksjon

FORMAT

Tekst

LCase-funksjon

LOWER

Tekst

Left-funksjon

LEFT

Tekst

Len-funksjon

LEN

Tekst

LTrim-, RTrim- og Trim-funksjon

TRIM

LTRIM

RTRIM

Tekst

Replace-funksjon

REPLACE

Tekst

Right-funksjon

RIGHT

Tekst

StrReverse-funksjon

REVERSE

Tekst

UCase-funksjon

UPPER

Trenger du mer hjelp?

Vil du ha flere alternativer?

Utforsk abonnementsfordeler, bla gjennom opplæringskurs, finn ut hvordan du sikrer enheten og mer.

Fellesskap hjelper deg med å stille og svare på spørsmål, gi tilbakemelding og høre fra eksperter med stor kunnskap.