Als u uw Access-gegevens naar SQL Server migreert of een Access-oplossing met SQL Server als back-enddatabase maakt, is het van groot belang 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.
Raadpleeg de artikelen Access SQL: basisbegrippen, woordenlijst en syntaxis en Transact-SQL 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 de declaratie SQL-parameters in de SQL-weergave |
@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 juiste waarde WHERE Bitvalue <> 0
-
Null-waarden
Een null-waarde is niet een 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 "drielagige logica", 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-clausules. 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 gelijkheidscontrole met NULL met 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 alternatief voor grondig testen en het 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 hoofdzakelijk de TSQL-functies CAST en CONVERT, 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 datepart genoemd en worden trefwoordwaarden gebruikt waarvoor geen aanhalingstekens zijn vereist.
Onderdeel
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 overeenkomstige TSQL-functie is, kunt u meestal een gecomputeerde kolom maken (de TSQL-term die voor een berekende kolom wordt gebruikt) 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 |
||
Conversie |
||
Conversie |
||
Conversie |
||
Conversie |
||
Conversie |
||
Datum/tijd |
||
Datum/tijd |
||
Datum/tijd |
||
Datum/tijd |
||
Datum/tijd |
||
Datum/tijd |
||
Datum/tijd |
||
Datum/tijd |
||
Datum/tijd |
||
Datum/tijd |
||
Datum/tijd |
||
Datum/tijd |
||
Datum/tijd |
||
Datum/tijd |
||
Datum/tijd |
||
Statistische domeinfuncties |
||
Wiskunde |
||
Wiskunde |
||
Wiskunde |
||
Wiskunde |
||
Wiskunde |
||
Wiskunde |
||
Wiskunde |
||
Wiskunde |
||
Wiskunde |
||
Wiskunde |
||
Wiskunde |
||
Programmaverloop |
||
Programmaverloop |
||
Statistisch |
||
Statistische SQL-functies |
||
Statistische SQL-functies |
||
Statistische SQL-functies |
||
Statistische SQL-functies |
||
Statistische SQL-functies |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |