Jämförelse av SQL i Access med T-SQL för SQL Server

Gäller för
Access för Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Om du migrerar dina Access-data till SQL Server eller om du skapar en Access-lösning med SQL Server som backend-databas är det viktigt att du vet skillnaderna mellan Access SQL och SQL Server Transact SQL (TSQL). I den här artikeln beskrivs viktiga skillnader som du behöver känna till så att din lösning fungerar som den ska.

Mer information finns i Access SQL: grundläggande begrepp, ordlista och syntax och Transact-SQL Reference.

Skillnader i syntax och uttryck

Det finns några skillnader i syntax och uttryck som kräver konvertering. I följande tabell sammanfattas de vanligaste.

Skillnad Access SQL SQL Server TSQL
Attribut för relationsdatabas Kallas vanligtvis för ett fält Kallas vanligtvis för kolumn
Strängliteral Citat ("), t.ex. "Mira Magnusson" Apostrof ('), t.ex. 'Mira Magnusson'.
Datumformat Nummertecken (#), t.ex. #1/1/2019# Apostrof ('), t.ex. '1/1/2019'
Flera jokertecken Asterisk (*), t.ex. "Sofie*" Procent (%), t.ex. 'Sofie%'
Enskilt jokertecken Frågetecken (?), t.ex. "Sofie?" Understreck (_), t.ex. "Sofie_"
Modulo-operator MOD-operator, t.ex. Värde1 MOD Värde2 Procent (%), t.ex. Värde1 % Värde2
Booleska värden WHERE Bitvalue = [Sant | Falskt]
Eller
WHERE Bitvalue = [-1 | 0]
WHERE Bitvalue = [1 | 0]
Parametrar [<Ett namn som inte är en definierad kolumn>]
Eller
I SQL-vyn använder du deklarationen för SQL-parametrar
@ParamName

Obs!

  • I Access används citattecken (") runt tabellnamn och objekt. I T-SQL kan de användas för tabellnamn med blanksteg, men det är inte en standardmetod för namngivning. I de flesta fall bör nya namn utan blanksteg anges för objektnamn, men frågor måste också skrivas om för att avspegla nya tabellnamn. Använd hakparenteser [] för tabeller som du inte kan byta namn på men som inte överensstämmer med namngivningsstandarder. Access lägger även till extra parenteser runt parametrar i frågor, men de kan tas bort i T-SQL.

  • Överväg att använda det kanoniska datumformatet yyyy-mm-dd hh:nn:ss. Det är en ODBC-standard för datum som lagras som tecken som gör att de kan visas på ett konsekvent sätt i databaser och som bevarar sorteringsordningen för datum.

  • Om du vill undvika förvirring när du jämför booleska värden kan du använda följande jämförelse för Access och SQL Server:

    • Test för falskt värde WHERE Bitvalue = 0
    • Test för sant värde WHERE Bitvalue <> 0

Null-värden

Ett null-värde är inte ett tomt fält som betyder "inget värde alls". Ett null-värde är en platshållare som innebär att data saknas eller är okända. Databassystem som känner igen null-värden implementerar "trevärdeslogik", vilket innebär att något kan vara sant, falskt eller okänt. Om du inte hanterar null-värden korrekt kan du få felaktiga resultat när du gör likhetsjämförelser eller utvärderar WHERE-satser. Här är en jämförelse av hur Access och SQL Server hanterar null-värden.

Inaktivera null-värden i en tabell

I Access och SQL Server är null-värden aktiverade som standard. Om du vill inaktivera null-värden i en tabellkolumn gör du så här:

  • I Access ställer du in egenskapen Obligatorisk för ett fält till Ja.
  • I SQL Server lägger du till attributet NOT NULL i en kolumn i ett CREATE TABLE-uttryck.

Test för null-värden i en WHERE-sats

Använd jämförelsepredikaten IS NULL och IS NOT NULL:

  • Använd IS NULL eller IS NOT NULL i Access. Till exempel:

    SELECT … WHERE column IS NULL.
    
  • Använd IS NULL eller IS NOT NULL i SQL Server. Till exempel:

    SELECT … WHERE field IS NULL
    

Konvertera null-värden med funktioner

Använd null-funktionerna för att skydda dina uttryck och returnera alternativa värden:

  • I Access använder du funktionen NZ (värde; [värdeomnull]) som returnerar 0 eller ett annat värde. Till exempel:

    SELECT AVG (NZ (Weight, 50) ) FROM Product
    
  • I SQL Server använder du funktionen ISNULL (värde, ersättningsvärde) som returnerar 0 eller ett annat värde. Till exempel:

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

Förstå databasalternativ

Vissa databassystem har specifika mekanismer:

  • I Access finns det inga databasalternativ som gäller null.
  • I SQL Server kan du använda alternativet ANGE ANSI_NULLS AV för jämförelser av direkt likhet med NULL med operatorerna = och <> . Vi rekommenderar att du inte använder det här alternativet eftersom det är föråldrat och kan förvirra andra som använder ISO-kompatibel null-hantering.

Konvertering och omvandling

När du arbetar med data eller programmering finns det ett ständigt behov att konvertera från en datatyp till en annan. Processen för konvertering kan vara enkel eller komplicerad. Vanligt förekommande problem som du måste tänka på är: implicit eller explicit konvertering, aktuella nationella inställningar för datum och tid, avrundning och trunkering av tal och datatypstorlekar. Det finns ingen ersättning för grundlig testning och bekräftelse av dina resultat.

I Access använder du funktioner för typkonvertering. Det finns elva stycken, en för varje datatyp. Om du till exempel vill konvertera ett flyttal till en sträng:


CStr(437.324) returns the string "437.324".

I SQL Server använder du främst funktionerna CAST och CONVERT TSQL, även om det finns andra konverteringsfunktioner för särskilda behov. Om du till exempel vill konvertera ett flyttal till en sträng:


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

Funktionerna DateAdd, DateDiff samt DatePart

De här vanliga datumfunktionerna liknar varandra (DatumLäggTill och DateAdd, DatumDiff och DateDiff samt DatumDel och DatePart) i Access och TSQL, men användningen av det första argumentet skiljer sig åt.

  • I Access kallas det första argumentet intervall, och det är ett stränguttryck som kräver citattecken.

  • I SQL Server kallas det första argumentet datumdelen, och nyckelordsvärden som inte kräver citattecken används.

    Komponent Access SQL Server
    År "åååå" year, yy, yyyy
    Kvartal "q" quarter, qq, q
    Månad "m" month, mm, m
    Dag på år "å" dayofyear, dy, y
    Dag "d" day, dd, d
    Vecka "vv" wk, ww
    Dag i vecka "v" weekday, dw
    Timme "t" hour, hh
    Minut "n" minute, mi, n
    Sekund "s" second, ss, s
    Millisekund millisecond, ms

Jämförelse av funktioner

Access-frågor kan innehålla beräknade kolumner som ibland använder Access-funktioner för att få resultat. När du migrerar frågor till SQL Server måste du ersätta Access-funktionen med en motsvarande TSQL-funktion om en sådan finns tillgänglig. Om det inte finns någon motsvarande TSQL-funktion kan du vanligtvis skapa en beräknad kolumn (TSQL-termen som används för en beräknad kolumn) för att göra vad du vill. TSQL har ett brett utbud av funktioner och det är till din fördel att se vad som är tillgängligt. Mer information finns i Vad är SQL-databasfunktionerna?.

I följande tabell visas vilken Access-funktion som har en motsvarande TSQL-funktion.

Kategori i Access Access-funktion TSQL-funktion
Konvertering Funktionen Tecken CHAR
Konvertering Funktionen Dag DAY
Konvertering Funktionen FormatTal FORMAT
Konvertering Funktionen FormatProcent FORMAT
Konvertering Funktionen Str STR
Konvertering Typkonverteringsfunktioner CASTA och KONVERTERA
Datum/tid Funktionen Datum CURRENT_TIMESTAMP
Datum/tid Funktionen Dag DATUMFROMPARTS
Datum/tid Funktionen DatumLäggTill DATUMLÄGG TILL
Datum/tid Funktionen DatumDiff DATEDIFF
DATEDIFF_BIG
Datum/tid Funktionen DatumDel DATUMDEL
Datum/tid Funktionen DatumSerie DATUMFROMPARTS
Datum/tid Funktionen DatumSträng DATUMNAMN
Datum/tid Funktionen Timme TIDFROMDELAR
Datum/tid Funktionen Minut TIDFROMDELAR
Datum/tid Funktionen Månad MONTH
Datum/tid Funktionen Nu SYSDATETIME
Datum/tid Funktionen Sekund TIDFROMDELAR
Funktionen Tid TIDFROMDELAR
Datum/tid Funktionen TidSerie TIDFROMDELAR
Datum/tid Funktionen Veckodag DATUMDEL
DATUMNAMN
Datum/tid Funktionen År YEAR
DATUMFROMPARTS
Mängdfunktioner för domäner Funktionerna DFörsta och DSista FIRST_VALUE
LAST_VALUE
Matematik Funktionen Abs ABS
Matematik Funktionen Arctan ATAN
ATN2
Matematik Funktionen Cos COS
ACOS
Matematik Funktionen Exp EXP
Matematik Funktionerna Heltal och Fix RUNDA.NER
Matematik Funktionen Ln LOG
LOG10
Matematik Funktionen Slump SLUMP
Matematik Funktionen Rund AVRUNDA
Matematik Funktionen Positivt TECKEN
Matematik Funktionen Sin SIN
Matematik Funktionen Rot ROT
Programflöde Funktionen Välj VÄLJ
Programflöde Funktionen OOM IIF
Statistik Funktionen Medel AVG
SQL-mängdfunktioner Funktionen Antal ANTAL
COUNT_BIG
SQL-mängdfunktioner Funktionerna Min och Max MIN
MAX
SQL-mängdfunktioner Funktionerna Stdav och StdavP STDAV
STDAVP
SQL-mängdfunktioner Funktionen Summa SUMMA
SQL-mängdfunktioner Funktionerna Varians och VariansP VARIANS
VARIANSP
Text Funktionen Format FORMAT
Text Funktionen Gemener LOWER
Text Funktionen Vänster VÄNSTER
Text Funktionen Längd LÄNGD
Text Funktionerna VRensa, HRensa och Rensa TRIM
LTRIM
RTRIM
Text Funktionen Ersätt ERSÄTTA
Text Funktionen Höger RÄTT
Text Funktionen StrOmvänd OMVÄND
Text Funktionen Versaler UPPER