Access SQL vergelijken met SQL Server TSQL

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

Functie Chr

CHAR

Conversie

Functie Day

DAY

Conversie

Functie FormatNumber

FORMAT

Conversie

Functie FormatPercent

FORMAT

Conversie

Functie Str

STR

Conversie

Functies voor typeconversie

CAST and CONVERT

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

ATAN

ATN2

Wiskunde

Functie Cos

COS

ACOS

Wiskunde

Functie Exp

EXP

Wiskunde

Functies Int en Fix

FLOOR

Wiskunde

Functie Log

LOG

LOG10

Wiskunde

Functie Rnd

RAND

Wiskunde

Afrondfunctie

ROUND

Wiskunde

Functie Sgn

SIGN

Wiskunde

Functie Sin

SIN

Wiskunde

Functie Sqr

SQRT

Programmaverloop

Functie Choose

CHOOSE

Programmaverloop

Functie IIf

IIF

Statistisch

Functie Avg

AVG

Statistische SQL-functies

Functie Count

COUNT

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

SUM

Statistische SQL-functies

Functies Var en VarP

VAR

VARP

Tekst

Format, functie

FORMAT

Tekst

Functie LCase

LOWER

Tekst

Functie Left

LEFT

Tekst

Functie Len

LEN

Tekst

Functies LTrim, RTrim en Trim

TRIM

LTRIM

RTRIM

Tekst

Functie Replace

REPLACE

Tekst

Functie Right

RIGHT

Tekst

Functie StrReverse

REVERSE

Tekst

Functie UCase

UPPER

Meer hulp nodig?

Uw vaardigheden uitbreiden
Training verkennen
Als eerste nieuwe functies krijgen
Deelnemen aan Microsoft insiders

Was deze informatie nuttig?

Hoe tevreden bent u met de vertaalkwaliteit?
Wat heeft uw ervaring beïnvloed?

Bedankt voor uw feedback.

×