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 |
||
Konvertering |
||
Konvertering |
||
Konvertering |
||
Konvertering |
||
Konvertering |
||
Dato/klokkeslett |
||
Dato/klokkeslett |
||
Dato/klokkeslett |
||
Dato/klokkeslett |
||
Dato/klokkeslett |
||
Dato/klokkeslett |
||
Dato/klokkeslett |
||
Dato/klokkeslett |
||
Dato/klokkeslett |
||
Dato/klokkeslett |
||
Dato/klokkeslett |
||
Dato/klokkeslett |
||
Dato/klokkeslett |
||
Dato/klokkeslett |
||
Dato/klokkeslett |
||
Domain Aggregate |
||
Matematikk |
||
Matematikk |
||
Matematikk |
||
Matematikk |
||
Matematikk |
||
Matematikk |
||
Matematikk |
||
Matematikk |
||
Matematikk |
||
Matematikk |
||
Matematikk |
||
Programflyt |
||
Programflyt |
||
Statistisk |
||
SQL aggregat |
||
SQL aggregat |
||
SQL aggregat |
||
SQL aggregat |
||
SQL aggregat |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |