Vergleich von Access SQL und SQL Server TSQL

Gilt für
Access für Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Wenn Sie Ihre Access-Daten zu SQL Server migrieren oder eine Access-Lösung mit SQL Server als Back-End-Datenbank erstellen, müssen Sie unbedingt die Unterschiede zwischen Access SQL und SQL Server Transact SQL (TSQL) kennen. Im Folgenden werden die wichtigsten Unterschiede aufgeführt, die Sie kennen müssen, damit Ihre Lösung wie vorgesehen funktioniert.

Weitere Informationen finden Sie unter Access SQL: Grundlegende Konzepte, Vokabular und Syntax und Transact-SQL-Referenz.

Syntax- und Ausdrucksunterschiede

Es gibt ein paar Syntax- und Ausdrucksunterschiede, die eine Konvertierung erfordern. Die folgende Tabelle fasst die häufigsten zusammen.

Unterschied Access SQL SQL Server TSQL
Relationales Datenbankattribut Wird in der Regel als Feld bezeichnet Wird in der Regel als Spalte bezeichnet
Zeichenfolgenliterale Anführungszeichen ("), z. B."Mary Q. Contrary" Apostroph ('), z. B.'Mary Q. Contrary'
Datumsliterale Nummernzeichen (#), z. B. #1.1.2019# Apostroph ('), z. B. '1.1.2019'
Mehrfache Platzhalterzeichen Sternchen (*), z. B. "Cath*" Prozent (%), z. B. "Cath%"
Einfache Platzhalterzeichen Fragezeichen (?), z. B. "Cath?" Unterstrich (_), z. B. "Cath_"
Modulo-Operator MOD-Operator, z. B. Wert1 MOD Wert2 Prozent (%), z. B. Wert1 % Wert2
Boolesche Werte WO Bitwert = [Wahr | Falsch]
Oder
WO Bitwert = [-1 | 0]
WO Bitwert = [1 | 0]
Parameter [<Ein Name, der keine definierte Spalte> ist]
Oder
Verwenden Sie in der SQL-Ansicht die SQL-Parameterdeklaration.
@ParamName

Hinweise

  • Access verwendet Anführungszeichen (") um Tabellennamen und Objekte herum. T-SQL kann sie für Tabellennamen mit Leerzeichen verwenden. Dies ist jedoch keine Standardbenennungsmethode. In den meisten Fällen sollten Objektnamen ohne Leerzeichen umbenannt werden, Abfragen müssen aber auch so umgeschrieben werden, dass Sie neuen Tabellennamen entsprechen. Verwenden Sie Klammern [] für Tabellen, die nicht umbenannt werden können, die jedoch nicht den Benennungsstandards entsprechen. Außerdem klammert Access Parameter in Abfragen zusätzlich ein, sie können jedoch in T-SQL entfernt werden.

  • Erwägen Sie die Verwendung des kanonischen Datumsformats yyyy-mm-dd hh:nn:ss, bei dem es sich um einen ODBC-Standard für Datumsangaben handelt, die als Zeichen gespeichert sind. Er bietet eine konsistente Methode, sie datenbankübergreifend darzustellen, und erhält die Sortierreihenfolge des Datums aufrecht.

  • Um Verwechslungen beim Vergleichen von booleschen Werten zu vermeiden, können Sie den folgenden Vergleich für Access und SQL Server verwenden:

    • Testen auf falscher Wert WHERE Bitvalue = 0
    • Testen auf true-Wert WHERE Bitwert <> 0

Nullwerte

Ein NULL-Wert ist kein leeres Feld, das "überhaupt kein Wert" bedeutet. Ein Nullwert ist ein Platzhalter, d. h., dass Daten fehlen oder unbekannt sind. Datenbanksysteme, die NULL-Werte erkennen, implementieren "Logik mit drei Werten", was bedeutet, dass etwas wahr, falsch oder unbekannt sein kann. Wenn Sie NULL-Werte nicht ordnungsgemäß verarbeiten, können Sie falsche Ergebnisse erhalten, wenn Sie Gleichheitsvergleiche durchführen oder WHERE-Klauseln auswerten. Nachfolgend wird verglichen, wie Access und SQL Server Nullwerte behandeln.

Deaktivieren von Nullwerten in einer Tabelle

In Access und SQL Server sind Nullwerte standardmäßig aktiviert. Zum Deaktivieren von Nullwerten in einer Tabellenspalte gehen Sie folgendermaßen vor:

  • Stellen Sie in Access die Eigenschaft Pflichtfeld auf "Ja" ein.
  • Fügen Sie in SQL Server das NOT NULL-Attribut zu einer Spalte in einer CREATE TABLE-Anweisung hinzu.

Test für Nullwerte in einer WHERE-Klausel

Verwenden der Vergleichsprädikate IS NULL und IS NOT NULL:

  • Verwenden Sie in Access IS NULL oder IS NOT NULL. Beispiel:

    SELECT … WHERE column IS NULL.
    
  • Verwenden Sie in SQL Server IS NULL oder IS NOT NULL. Beispiel:

    SELECT … WHERE field IS NULL
    

Konvertieren von Nullwerten mit Funktionen

Verwenden Sie die Nullfunktionen, um ihre Ausdrücke zu schützen und alternative Werte zurückzugeben:

  • Verwenden Sie in Access die NZ (Wert, [WertWennNull])-Funktion, die 0 oder einen anderen Wert zurückgibt. Beispiel:

    SELECT AVG (NZ (Weight, 50) ) FROM Product
    
  • Verwenden Sie in SQL Server die ISNULL-Funktion (Wert, replacement_value), die 0 oder einen anderen Wert zurückgibt. Beispiel:

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

Grundlegendes zu Datenbankoptionen

Bei einigen Datenbanksystemen gibt es proprietäre Mechanismen:

  • In Access stehen keine Datenbankoptionen zur Verfügung, die sich auf "Null" beziehen.
  • In SQL Server können Sie die Option SET ANSI_NULLS OFF für direkte Gleichheitsvergleiche mit NULL verwenden, indem Sie die Operatoren = und <> verwenden. Wir empfehlen, diese Option zu vermeiden, da sie veraltet ist und Andere verwirren kann, die auf ISO-konforme Null-Behandlung angewiesen sind.

Konvertierung und Umwandlung

Wenn Sie mit Daten arbeiten oder programmieren, ist es ständig erforderlich, Datentypen zu konvertieren. Der Vorgang der Konvertierung kann einfach oder komplex sein. Häufig auftretende Probleme, die Sie berücksichtigen müssen, sind: implizite oder explizite Konvertierung, die Ländereinstellungen für das aktuelle Datum und die Uhrzeit, das Runden oder Abschneiden von Zahlen sowie die Größe des Datentyps. Es gibt keinen Ersatz für gründliche Tests und die Bestätigung Ihrer Ergebnisse.

In Access verwenden Sie die elf Typkonvertierungsfunktionen – eine für jeden Datentyp, die alle mit dem Buchstaben C beginnen. Wenn Sie beispielsweise eine Gleitkommazahl in eine Zeichenfolge konvertieren möchten:


CStr(437.324) returns the string "437.324".

In SQL Server verwenden Sie in erster Linie die Funktionen CAST und CONVERT TSQL, obwohl es andere Konvertierungsfunktionen für spezielle Anforderungen gibt. Wenn Sie beispielsweise eine Gleitkommazahl in eine Zeichenfolge konvertieren möchten:


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

Die Funktionen "DateAdd", "DateDiff" und "DatePart"

Diese häufig verwendeten Datumsfunktionen sind in Access und TSQL ähnlich (DateAdd, DateDiff und DatePart), aber die Verwendung des ersten Arguments ist unterschiedlich.

  • In Access wird das erste Argument als Intervall bezeichnet, und es handelt sich um einen Zeichenfolgenausdruck, der Anführungszeichen erfordert.

  • In SQL Server wird das erste Argument datepart genannt und verwendet Schlüsselwort (keyword) Werte, die keine Anführungszeichen erfordern.

    Komponente Access SQL Server
    Jahr "yyyy" year, yy, yyyy
    Quartal "q" quarter, qq, q
    Monat "m" month, mm, m
    Tag des Jahres "y" dayofyear, dy, y
    Tag "d" day, dd, d
    Woche "ww" wk, ww
    Wochentag "w" weekday, dw
    Stunde "h" hour, hh
    Minute "n" minute, mi, n
    Sekunde "s" second, ss, s
    Millisekunde millisecond, ms

Vergleich von Funktionen

Access-Abfragen können berechnete Spalten enthalten, die manchmal Access-Funktionen verwenden, um Ergebnisse zu erhalten. Wenn Sie Abfragen zu SQL Server migrieren, müssen Sie die Access-Funktion durch eine entsprechende TSQL-Funktion ersetzen, sofern verfügbar. Wenn keine entsprechende TSQL-Funktion vorhanden ist, können Sie in der Regel eine berechnete Spalte ( der für eine berechnete Spalte verwendete TSQL-Begriff) erstellen, um die gewünschten Aktionen auszuführen. TSQL verfügt über eine breite Palette von Funktionen und es ist zu Ihrem Vorteil, zu sehen, was verfügbar ist. Weitere Informationen finden Sie unter Was sind die SQL-Datenbankfunktionen?.

Die folgende Tabelle zeigt, welche Access-Funktion über eine entsprechende TSQL-Funktion verfügt.

Access-Kategorie Access-Funktion TSQL-Funktion
Konvertierung Chr-Funktion CHAR
Konvertierung Day-Funktion DAY
Konvertierung FormatNumber-Funktion FORMAT
Konvertierung FormatPercent-Funktion FORMAT
Konvertierung Str-Funktion STR
Konvertierung Typumwandlungsfunktionen CAST und CONVERT
Datum/Uhrzeit Date-Funktion CURRENT_TIMESTAMP
Datum/Uhrzeit Day-Funktion DATEFROMPARTS
Datum/Uhrzeit DateAdd-Funktion DATEADD
Datum/Uhrzeit DateDiff-Funktion DATEDIFF
DATEDIFF_BIG
Datum/Uhrzeit DatePart-Funktion DATEPART
Datum/Uhrzeit DateSerial-Funktion DATEFROMPARTS
Datum/Uhrzeit DateValue-Funktion DATENAME
Datum/Uhrzeit Hour-Funktion TIMEFROMPARTS
Datum/Uhrzeit Minute-Funktion TIMEFROMPARTS
Datum/Uhrzeit Month-Funktion MONTH
Datum/Uhrzeit Now-Funktion SYSDATETIME
Datum/Uhrzeit Second-Funktion TIMEFROMPARTS
Time-Funktion TIMEFROMPARTS
Datum/Uhrzeit TimeSerial-Funktion TIMEFROMPARTS
Datum/Uhrzeit Weekday-Funktion DATEPART
DATENAME
Datum/Uhrzeit Jahr-Funktion YEAR
DATEFROMPARTS
Domänenaggregat DFirst- und DLast-Funktion FIRST_VALUE
LAST_VALUE
Mathematik Abs-Funktion ABS
Mathematik Atn-Funktion ARCTAN
ATN2
Mathematik Cos-Funktion COS
ARCCOS
Mathematik Exp-Funktion EXP
Mathematik Int- und Fix-Funktion FLOOR
Mathematik Log-Funktion LOG
LOG10
Mathematik Rnd-Funktion RAND
Mathematik Round-Funktion ROUND
Mathematik Sgn-Funktion SIGN
Mathematik Sin-Funktion SIN
Mathematik Sqr-Funktion WURZEL
Programmablauf Choose-Funktion WAHL
Programmablauf Wenn-Funktion IIF
Statistisch Avg-Funktion AVG
SQL-Aggregat Count-Funktion ANZAHL
COUNT_BIG
SQL-Aggregat Min- und Max-Funktion MIN
MAX
SQL-Aggregat StDev- und StDevP-Funktion STABW
STABWN
SQL-Aggregat Sum-Funktion SUMME
SQL-Aggregat Var- und VarP-Funktion VARIANZ
VARIANZEN
Text Format (Funktion) FORMAT
Text LCase-Funktion LOWER
Text Left-Funktion LINKS
Text Len-Funktion LÄNGE
Text LTrim-, RTrim- und Trim-Funktion TRIM
LTRIM
RTRIM
Text Replace-Funktion ERSETZEN
Text Right-Funktion RECHTS
Text StrReverse-Funktion RÜCKWÄRTS
Text UCase-Funktion UPPER