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

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

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

Kommentarer   

  • 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. Det finns även 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 för datepart, 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 oftast skapa en beräknad kolumn i TSQL för att göra det du vill. TSQL har ett brett utbud av funktioner, och det är bra att se vad som finns tillgängligt. Mer information finns i artikeln om vad SQL-databasfunktioner är.

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

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

DATENAME

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

DATENAME

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

FLOOR

Matematik

Funktionen Ln

LOG

LOG10

Matematik

Funktionen Slump

RAND

Matematik

Funktionen Rund

ROUND

Matematik

Funktionen Positivt

SIGN

Matematik

Funktionen Sin

SIN

Matematik

Funktionen Rot

SQRT

Programflöde

Funktionen Välj

CHOOSE

Programflöde

Funktionen OOM

IIF

Statistik

Funktionen Medel

AVG

SQL-mängdfunktioner

Funktionen Antal

COUNT

COUNT_BIG

SQL-mängdfunktioner

Funktionerna Min och Max

MIN

MAX

SQL-mängdfunktioner

Funktionerna Stdav och StdavP

STDEV

STDEVP

SQL-mängdfunktioner

Funktionen Summa

SUM

SQL-mängdfunktioner

Funktionerna Varians och VariansP

VAR

VARP

Text

Funktionen Format

FORMAT

Text

Funktionen Gemener

LOWER

Text

Funktionen Vänster

LEFT

Text

Funktionen Längd

LEN

Text

Funktionerna VRensa, HRensa och Rensa

TRIM

LTRIM

RTRIM

Text

Funktionen Ersätt

REPLACE

Text

Funktionen Höger

RIGHT

Text

Funktionen StrOmvänd

REVERSE

Text

Funktionen Versaler

UPPER

Behöver du mer hjälp?

Utöka dina Office-kunskaper
Utforska utbildning
Få nya funktioner först
Anslut till Office Insiders

Hade du nytta av den här informationen?

Tack för din feedback!

Tack för din feedback! Det låter som att det kan vara bra att koppla dig till en av våra Office-supportrepresentanter.

×