Wenn Sie Ihre Access-Daten zu SQL Server migrieren oder eine Access-Lösung mit SQL Server als Back-End-Datenbank erstellen, ist es wichtig, dass Sie 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:
-
Test für falschen Wert WO Bitwert = 0
-
Test für wahren Wert WO Bitwert <> 0
-
Nullwerte
Ein Nullwert ist kein leeres Feld, d. h. "überhaupt kein Wert". Ein Nullwert ist ein Platzhalter, d. h., dass Daten fehlen oder unbekannt sind. Datenbanksysteme, die Nullwerte erkennen, implementieren "dreiwertige Logik". Das bedeutet, dass ein Element wahr, falsch oder unbekannt sein kann. Wenn Sie Nullwerte nicht richtig behandeln, können Sie bei Übereinstimmungsvergleichen oder der Auswertung von WHERE-Klauseln falsche Ergebnisse erhalten. 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“ mithilfe der Operatoren „=“ und „<“, „>“ für direkte Übereinstimmungsvergleiche mit „NULL“ 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. Um eine sorgfältige Prüfung und Bestätigung Ihrer Ergebnisse kommen Sie nicht herum.
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 hauptsächlich die TSQL-Funktionen UMWANDELN und KONVERTIEREN, obwohl es noch 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 Intervallbezeichnet. Es ist ein Zeichenfolgenausdruck, der Anführungszeichen erfordert.
-
In SQL Server wird das erste Argument datepart genannt. Es verwendet Schlüsselwortwerte, 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 erstellen (für eine berechnete Spalte verwendeter TSQL-Ausdruck), um die gewünschten Aktionen auszuführen. TSQL verfügt über eine breite Palette von nützlichen Funktionen. Sehen Sie sie sich an. Weitere Informationen finden Sie unter Was sind die Funktionen der SQL-Datenbank?.
Die folgende Tabelle zeigt, welche Access-Funktion über eine entsprechende TSQL-Funktion verfügt.
Access-Kategorie |
Access-Funktion |
TSQL-Funktion |
Konvertierung |
||
Konvertierung |
||
Konvertierung |
||
Konvertierung |
||
Konvertierung |
||
Konvertierung |
||
Datum/Uhrzeit |
||
Datum/Uhrzeit |
||
Datum/Uhrzeit |
||
Datum/Uhrzeit |
||
Datum/Uhrzeit |
||
Datum/Uhrzeit |
||
Datum/Uhrzeit |
||
Datum/Uhrzeit |
||
Datum/Uhrzeit |
||
Datum/Uhrzeit |
||
Datum/Uhrzeit |
||
Datum/Uhrzeit |
||
Datum/Uhrzeit |
||
Datum/Uhrzeit |
||
Datum/Uhrzeit |
||
Domänenaggregat |
||
Mathematisch |
||
Mathematisch |
||
Mathematisch |
||
Mathematisch |
||
Mathematisch |
||
Mathematisch |
||
Mathematisch |
||
Mathematisch |
||
Mathematisch |
||
Mathematisch |
||
Mathematisch |
||
Programmablauf |
||
Programmablauf |
||
Statistisch |
||
SQL-Aggregat |
||
SQL-Aggregat |
||
SQL-Aggregat |
||
SQL-Aggregat |
||
SQL-Aggregat |
||
Text |
||
Text |
||
Text |
||
Text |
||
Text |
||
Text |
||
Text |
||
Text |
||
Text |