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 skapar en Access-lösning med SQL Server som backend-databas är det viktigt att du känner till 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 Referens.

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
Använd deklarationen för SQL-parametrar i SQL-vyn
@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 innebär "inget värde alls". Ett null-värde är en platshållare som innebär att data saknas eller är okända. Databassystem som använder null-värden tillämpar "trevärd logik", 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 undersöker 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 SET ANSI_NULLS OFF för direkta likhetsjämförelser 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 inget som kan ersätta noggrann testning och bekräftelse av resultaten.

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 TSQL-funktionerna CAST och CONVERT, även om det finns andra konverteringsfunktioner för specialiserade 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 är ett stränguttryck som kräver citattecken.

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

    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 finns tillgängligt. Mer information finns i Vad är SQL-databasfunktioner?.

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 BILDAD
Konvertering Funktionen FormatProcent BILDAD
Konvertering Funktionen Str STR
Konvertering Typkonverteringsfunktioner CAST och CONVERT
Datum/tid Funktionen Datum CURRENT_TIMESTAMP
Datum/tid Funktionen Dag DATEFROMPARTS
Datum/tid Funktionen DatumLäggTill DATEADD
Datum/tid Funktionen DatumDiff DATEDIFF
DATEDIFF_BIG
Datum/tid Funktionen DatumDel DATEPART
Datum/tid Funktionen DatumSerie DATEFROMPARTS
Datum/tid Funktionen DatumSträng DATUMNAMN
Datum/tid Funktionen Timme TIMEFROMPARTS
Datum/tid Funktionen Minut TIMEFROMPARTS
Datum/tid Funktionen Månad MONTH
Datum/tid Funktionen Nu SYSDATETIME
Datum/tid Funktionen Sekund TIMEFROMPARTS
Funktionen Tid TIMEFROMPARTS
Datum/tid Funktionen TidSerie TIMEFROMPARTS
Datum/tid Funktionen Veckodag DATEPART
DATUMNAMN
Datum/tid Funktionen År YEAR
DATEFROMPARTS
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 BILDAD
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ÄTT
Text Funktionen Höger HÖGER
Text Funktionen StrOmvänd OMVÄNT
Text Funktionen Versaler UPPER