Access SQL vergelijken met SQL Server TSQL

Van toepassing op
Access voor Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Als u uw Access-gegevens migreert naar SQL Server of als u een Access-oplossing maakt met SQL Server als back-enddatabase, is het essentieel dat u de verschillen kent tussen Access SQL en SQL Server Transact SQL (TSQL). Hieronder ziet u de belangrijke variaties die u moet kennen om uw oplossing goed te laten werken.

Zie Access SQL: basisconcepten, woordenlijst en syntaxis enTransact-SQL-verwijzing voor meer informatie.

Syntaxis-en expressieverschillen

Er zijn een paar syntaxis-en expressieverschillen die moeten worden geconverteerd. In de volgende tabel ziet u de meest voorkomende opties.

Verschil Access SQL SQL Server TSQL
Kenmerk relationele database Wordt gewoonlijk een veld genoemd Wordt gewoonlijk een kolom genoemd
Letterlijke tekenreeksen Aanhalingsteken ("), zoals "Mary Q. Contrary" Apostrof ('), zoals 'Mary Q. Contrary'
Letterlijke datumwaarden Hekje (#), zoals #1/1/2019# Apostrof ('), zoals '1/1/2019'
Meerdere jokertekens Sterretje (*), zoals "Cath*" Percentage (%), zoals 'Cath%'
Enkel jokerteken Vraagteken (?), zoals "Cath?" Onderstrepingsteken (_), zoals "Cath_"
Modulo-operator MOD-operator, zoals Waarde1 MOD Waarde2 Percentage (%), zoals Waarde1 % Waarde2
Booleaanse waarden WHERE Bitvalue = [True | False]
Of
WHERE Bitvalue = [-1 | 0]
WHERE Bitvalue = [1 | 0]
Parameters [<Een naam die geen gedefinieerde kolom> is]
Of
Gebruik in de SQL-weergave de declaratie van SQL-parameters
@ParamName

Opmerkingen

  • In Access worden aanhalingstekens (") rond tabelnamen en objecten gebruikt. T-SQL kan deze gebruiken voor tabelnamen met spaties, maar dit is geen standaard naamgevingspraktijk. In de meeste gevallen moeten objectnamen worden hernoemd zonder spaties, maar query's moeten ook worden herschreven om nieuwe tabelnamen weer te geven. Gebruik vierkante haken [] voor tabellen waarvan de naam niet kan worden gewijzigd, maar die niet voldoen aan de naamgevingsnormen. Access voegt ook extra haakjes toe rond parameters in query's, maar deze kunnen in T-SQL worden verwijderd.

  • Overweeg het gebruik van de canonieke datumnotatie yyyy-mm-dd hh: nn: ss, wat een ODBC-standaard is voor datums die zijn opgeslagen als tekens en die een consistente manier biedt om ze in verschillende databases weer te geven en de datumvolgorde te behouden.

  • Om verwarring te voorkomen bij het vergelijken van Booleaanse waarden, kunt u de volgende vergelijking gebruiken voor Access en SQL Server:

    • Testen op onjuiste waarde WHERE Bitvalue = 0
    • Testen op ware waarde WHERE-bitwaarde <> 0

Null-waarden

Een null-waarde is geen leeg veld dat 'helemaal geen waarde' betekent. Een null-waarde is een tijdelijke aanduiding. Dit betekent dat gegevens ontbreken of onbekend zijn. Databasesystemen die null-waarden herkennen, implementeren 'logica met drie waarden', wat betekent dat iets waar, onwaar of onbekend kan zijn. Als u null-waarden niet goed verwerkt, kunt u onjuiste resultaten krijgen bij het maken van gelijkheidsvergelijkingen of het evalueren van WHERE-componenten. Hier ziet u een vergelijking van de manier waarop in Access en SQL Server null-waarden worden verwerkt.

Null-waarden in een tabel uitschakelen

In Access en SQL Server zijn null-waarden standaard ingeschakeld. Ga als volgt te werk om null-waarden in een tabelkolom uit te schakelen:

  • In Access stelt u de eigenschap Vereist van een veld in op Ja.
  • Voeg in SQL Server het kenmerk NOT NULL toe aan een kolom in een instructie CREATE TABLE.

Testen op null-waarden in een WHERE-component

Gebruik de IS NULL en IS NOT NULL vergelijkingspredicaten:

  • In Access gebruikt u IS NULL or IS NOT NULL. Bijvoorbeeld:

    SELECT … WHERE column IS NULL.
    
  • In SQL Server gebruikt u IS NULL of IS NOT NULL. Bijvoorbeeld:

    SELECT … WHERE field IS NULL
    

Null-waarden converteren met functies

Gebruik de null-functies om uw expressies te beveiligen en alternatieve waarden te retourneren:

  • Gebruik in Access de functie NZ (waarde,[waardealsnull]) die 0 of een andere waarde als resultaat geeft. Bijvoorbeeld:

    SELECT AVG (NZ (Weight, 50) ) FROM Product
    
  • Gebruik in SQL Server de functie ISNULL (waarde; vervangingswaarde) die 0 of een andere waarde als resultaat geeft. Bijvoorbeeld:

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

Databaseopties begrijpen

Sommige databasesystemen hebben eigen mechanismen:

  • In Access zijn er geen databaseopties die betrekking hebben op null.
  • In SQL Server kunt u de optie SET ANSI_NULLS OFF gebruiken voor directe gelijkheidsvergelijkingen met NULL met behulp van de operatoren = en<>. We raden aan dat u deze optie niet gebruikt omdat deze is verouderd en het kan anderen die afhankelijk zijn van ISO-compatibele nulafhandeling in verwarring brengen.

Conversie en casting

Wanneer u met gegevens of programmeren werkt, is het een goed moment om te converteren van het ene gegevenstype naar het andere. Het conversieproces kan eenvoudig of complex zijn. Veelvoorkomende problemen waar u aan moet denken zijn: impliciete of expliciete conversie, de huidige regionale instellingen voor datum en tijd, afronding of afkapping van getallen en grootten van gegevenstypen. Er is geen vervanging voor grondig testen en bevestigen van uw resultaten.

In Access gebruikt u de Functies voor het converteren van tekst, waarvan er elf zijn, elk beginnend met de letter C, één voor elk gegevenstype. Als u bijvoorbeeld een getal met een drijvende komma wilt omzetten in een tekenreeks:


CStr(437.324) returns the string "437.324".

In SQL Server gebruikt u voornamelijk de functies CAST en CONVERT TSQL, hoewel er andere conversiefuncties zijn voor gespecialiseerde behoeften. Als u bijvoorbeeld een getal met een drijvende komma wilt omzetten in een tekenreeks:


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

De functies DateAdd, DateDiff en DatePart

Deze veelgebruikte datumfuncties zijn vergelijkbaar (DateAdd, DateDiff en DatePart) in Access en TSQL. Echter, het gebruik van het eerste argument verschilt.

  • In Access wordt het eerste argument het interval genoemd en is het een tekenreeksexpressie waarvoor aanhalingstekens zijn vereist.

  • In SQL Server wordt het eerste argument het datumonderdeel genoemd en worden trefwoordwaarden gebruikt waarvoor geen aanhalingstekens zijn vereist.

    Component Access SQL Server
    Jaar "jjjj" jaar, jj, jjjj
    Kwartaal "k" kwartaal, kk, k
    Maand "m" maand, mm, m
    Dag van jaar "y" dagvanjaar, dy, y
    Dag "d" dag, dd, d
    Week "ww" wk, ww
    Dag van de week "w" weekdag, dw
    Uur "u" uur, uu
    Minuut "n" minuut, mi, n
    Seconde "s" seconde, ss, s
    Milliseconde milliseconde, ms

Vergelijking van functies

Access-query's kunnen berekende kolommen bevatten die soms Access-functies gebruiken om resultaten op te halen. Wanneer u query's migreert naar SQL Server, moet u de Access-functie vervangen door een equivalente TSQL-functie, indien beschikbaar. Als er geen bijbehorende TSQL-functie is, kunt u meestal een berekende kolom maken (de TSQL-term die wordt gebruikt voor een berekende kolom) om te doen wat u wilt. TSQL heeft een breed scala aan functies en het is in uw voordeel om te zien wat er beschikbaar is. Zie Wat zijn de SQL-databasefuncties? voor meer informatie.

In de volgende tabel ziet u welke Access-functie een bijbehorende TSQL-functie heeft.

Access-categorie Access-functie TSQL-functie
Conversie Functie Chr TEKEN
Conversie Functie Day DAY
Conversie Functie FormatNumber FORMAAT
Conversie Functie FormatPercent FORMAAT
Conversie Functie Str STR
Conversie Functies voor typeconversie CASTen en CONVERTEREN
Datum/Tijd Datumfunctie CURRENT_TIMESTAMP
Datum/Tijd Functie Day DATEFROMPARTS
Datum/Tijd Functie DateAdd DATEADD
Datum/Tijd Functie DateDiff DATEDIFF
DATEDIFF_BIG
Datum/Tijd Functie DatePart DATEPART
Datum/Tijd Functie DateSerial DATEFROMPARTS
Datum/Tijd Functie DateValue DATENAME
Datum/Tijd Uurfunctie TIMEFROMPARTS
Datum/Tijd Minuutfunctie TIMEFROMPARTS
Datum/Tijd Maandfunctie MONTH
Datum/Tijd Nufunctie SYSDATETIME
Datum/Tijd Secondefunctie TIMEFROMPARTS
Tijdfunctie TIMEFROMPARTS
Datum/Tijd Functie TimeSerial TIMEFROMPARTS
Datum/Tijd Weekdagfunctie DATEPART
DATENAME
Datum/Tijd Jaarfunctie YEAR
DATEFROMPARTS
Statistische domeinfuncties Functies DFirst, DLast FIRST_VALUE
LAST_VALUE
Wiskunde Functie Abs ABS
Wiskunde Functie Atn BOOGTAN
ATN2
Wiskunde Functie Cos COS
BOOGCOS
Wiskunde Functie Exp EXP
Wiskunde Functies Int en Fix FLOOR
Wiskunde Functie Log LOG
LOG10
Wiskunde Functie Rnd RAND
Wiskunde Afrondfunctie RONDE
Wiskunde Functie Sgn SIGN
Wiskunde Functie Sin SIN
Wiskunde Functie Sqr WORTEL
Programmaverloop Functie Choose KIEZEN
Programmaverloop Functie IIf IIF
Statistisch Functie Avg AVG
Statistische SQL-functies Functie Count AANTAL
COUNT_BIG
Statistische SQL-functies Functies Min en Max MIN
MAX
Statistische SQL-functies Functies StDev en StDevP STDEV
STDEVP
Statistische SQL-functies Sum-functie SOM
Statistische SQL-functies Functies Var en VarP VAR
VARP
Tekst Format, functie FORMAAT
Text Functie LCase LOWER
Text Functie Left LINKS
Text Functie Len LEN
Text Functies LTrim, RTrim en Trim TRIM
LTRIM
RTRIM
Text Functie Replace VERVANGEN
Text Functie Right RECHT
Text Functie StrReverse OMGEKEERDE
Text Functie UCase UPPER