Porównanie języka SQL programu Access z językiem TSQL programu SQL Server

Dotyczy
Access dla Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Jeśli przeprowadzasz migrację danych programu Access do SQL Server lub tworzysz rozwiązanie programu Access z SQL Server jako zewnętrzną bazą danych, ważne jest poznanie różnic między językiem SQL programu Access a SQL Server języku Transact SQL (TSQL). Poniżej przedstawiono ważne odmiany, które należy znać, aby Twoje rozwiązanie działało zgodnie z oczekiwaniami.

Aby uzyskać więcej informacji, zobacz Język Access SQL: podstawowe pojęcia, słownictwo i składnia oraz Dokumentacja Transact-SQL.

Różnice składni i wyrażeń

Istnieje kilka różnic składni i wyrażeń, które wymagają konwersji. W poniższej tabeli podsumowano najczęściej spotykane.

Różnica Access SQL SQL Server TSQL
Atrybut relacyjnej bazy danych Zwykle nazywany polem Zwykle nazywany kolumną
Literały ciągów Cudzysłów ("), na przykład "Mary Q. Contrary" Apostrof ('), na przykład 'Mary Q. Contrary'
Literały daty Znak numeru (#), na przykład #1/1/2019# Apostrof ('), na przykład '1/1/2019'
Wielokrotne znaki wieloznaczne Gwiazdka (*), na przykład "Cath*" Procent (%), na przykład 'Cath%'
Pojedyncze symbole wieloznaczne Znak zapytania (?), na przykład "Cath?" Znak podkreślenia (_), na przykład "Cath_"
Operator modulo Operator MOD, na przykład wartość1 MOD wartość2 Procent (%), na przykład Wartość1 % Wartość2
Wartości logiczne WHERE Bitvalue = [True | False]
Lub
WHERE Bitvalue = [-1 | 0]
WHERE Bitvalue = [1 | 0]
Parametry [<Nazwa, która nie jest zdefiniowaną kolumną>]
Lub
W widoku SQL użyj deklaracji parametrów SQL
@ParamName

Uwagi

  • W programie Access są używane znaki cudzysłowu (") wokół nazw tabel i obiektów. Język T-SQL może używać ich do nazw tabel zawierających spacje, ale nie jest to standardowe postępowanie nazewnictwa. W większości przypadków nazwa obiektu powinna zostać zmieniona na niezawierającą spacji, ale w celu odzwierciedlenia nowych nazw tabel należy również ponownie napisać zapytania. W przypadku tabel, których nazw nie można zmienić i które nie są zgodne ze standardami nazewnictwa, należy użyć nawiasów kwadratowych [ ]. Program Access dodaje także dodatkowe nawiasy wokół parametrów w zapytaniach, jednak można je usuwać w języku T-SQL.

  • Rozważmy używanie kanonicznego formatu daty, rrrr-mm-dd gg: mm:ss, który jest standardem ODBC dla dat przechowywanych jako znaki i który zapewnia spójny sposób przedstawiania ich w bazach danych oraz zachowuje kolejność sortowania daty.

  • W celu uniknięcia nieporozumień podczas porównywania wartości logicznych możesz użyć poniższego porównania dla programów Access i SQL Server:

    • Sprawdzanie wartości fałszu WHERE Bitvalue = 0
    • Sprawdzanie, czy nie ma wartości prawdziwej WHERE Bitvalue <> 0

Wartości null

Wartość null nie jest pustym polem, które oznacza "brak wartości". Wartość null to symbol zastępczy, który oznacza, że brakuje danych lub są one nieznane. Systemy baz danych, które rozpoznają wartości null, implementują "logikę trójwartościową", co oznacza, że coś może być prawdziwe, fałszywe lub nieznane. Jeśli wartości null nie są poprawnie obsługiwane, podczas porównywania równości lub oceniania klauzul WHERE można uzyskać niepoprawne wyniki. Poniżej przedstawiono porównanie tego, jak w programach Access i SQL Server są obsługiwane wartości null.

Wyłączanie wartości null w tabeli

w programach Access i SQL Server domyślnie wartości null są włączone. Aby wyłączyć wartości null w kolumnie tabeli, wykonaj następujące czynności:

  • W programie Access ustaw właściwość Wymagana pola na wartość Tak.
  • W programie SQL Server dodaj atrybut NOT NULL do kolumny w instrukcji CREATE TABLE.

Sprawdzanie wartości null w klauzuli WHERE

Należy użyć predykatów porównania IS NULL i IS NOT NULL:

  • W programie Access użyj predykatów IS NULL lub IS NOT NULL. Przykłady:

    SELECT … WHERE column IS NULL.
    
  • W programie SQL Server należy używać predykatów IS NULL lub NOT NULL. Przykłady:

    SELECT … WHERE field IS NULL
    

Konwertowanie wartości null za pomocą funkcji

Użyj funkcji null w celu ochrony wyrażeń i zwrócenia wartości alternatywnych:

  • W programie Access należy użyć funkcji NZ (wartość, [wartość_jeśli_null]), która zwraca wartość 0 lub inną wartość. Przykłady:

    SELECT AVG (NZ (Weight, 50) ) FROM Product
    
  • W programie SQL Server należy użyć funkcji ISNULL (Wartość, wartość_zastępcza) zwracającej wartość 0 lub inną wartość. Przykłady:

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

Opis opcji bazy danych

W niektórych systemach baz danych są dostępne mechanizmy własnościowe:

  • W programie Access nie ma żadnych opcji bazy danych odnoszących się do wartości null.
  • W SQL Server można użyć opcji USTAW ANSI_NULLS WYŁ. w celu bezpośredniego porównania równości z wartością NULL przy użyciu operatorów = i <> operatorów. Zalecamy, aby unikać korzystania z tej opcji, ponieważ jest ona przestarzała i może mylić inne osoby korzystające z obsługi wartości null zgodnej z ISO.

Konwersja i rzutowanie

Za każdym razem, gdy pracujesz z danymi lub oprogramowaniem, występuje stała konieczność konwertowania jednego typu danych na inny. Proces konwersji może być prosty lub złożony. Typowe problemy, które należy wziąć pod uwagę, to: konwersja niejawna lub jawna, bieżące ustawienia regionalne daty i godziny, zaokrąglanie lub obcinanie liczb oraz rozmiary typów danych. Nie ma podstaw do dokładnego testowania i potwierdzania wyników.

W programie Access są używane funkcje konwersji typów, których jest jedenaście, przy czym każda z nich zaczyna się od litery C i dotyczy określonego typu danych. Na przykład w celu przeprowadzenia konwersji liczby zmiennoprzecinkowej na ciąg:


CStr(437.324) returns the string "437.324".

W SQL Server używa się przede wszystkim funkcji CAST i CONVERT TSQL, chociaż istnieją inne funkcje konwersji przeznaczone do specjalistycznych potrzeb. Na przykład w celu przeprowadzenia konwersji liczby zmiennoprzecinkowej na ciąg:


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

funkcje DateAdd, DateDiff i DatePart

Te powszechnie używane funkcje daty są podobne (DateAdd, DateDiff i DatePart) w programie Access i języku TSQL, ale zastosowanie pierwszego argumentu się różni.

  • W programie Access pierwszy argument jest nazywany interwałem i wymaga cudzysłowów.

  • W SQL Server pierwszy argument jest nazywany elementem datepart i używa wartości słów kluczowych, które nie wymagają cudzysłowów.

    Składnik Access SQL Server
    Rok "rrrr" rok, rr, rrrr
    Kwartał "k" kwartał, kk, k
    Miesiąc "m" miesiąc, mm, m
    Dzień roku "y" dzień_roku, dy, y
    Dzień "d" dzień, dd, d
    Tydzień "ww" wk, ww
    Dzień tygodnia "w" dzień tygodnia, dw
    Godzina "g" godzina, gg
    Minuta "n" minuta, mi, n
    Sekunda "s" sekunda, ss, s
    Milisekunda milisekunda, ms

Porównanie funkcji

Zapytania programu Access mogą zawierać kolumny obliczeniowe, które czasami używają funkcji programu Access do uzyskiwania wyników. Jeśli przeprowadzasz migrację zapytań do programu SQL Server, musisz zastąpić funkcję programu Access na podobną funkcję języka TSQL, jeśli jest ona dostępna. Jeśli nie ma odpowiadającej jej funkcji TSQL, zazwyczaj można utworzyć kolumnę obliczaną (termin TSQL używany dla kolumny obliczeniowej), aby robić to, co chcesz. TSQL ma szeroką gamę funkcji i warto sprawdzić, co jest dostępne. Aby uzyskać więcej informacji, zobacz Co to są funkcje bazy danych SQL?.

W poniższa tabela pokazuje, która funkcja programu Access ma odpowiadającą jej funkcję języka TSQL.

Kategoria programu Access Funkcja programu Access Funkcja języka TSQL
Konwersja Funkcja Chr CHAR
Konwersja Funkcja Day DAY (dzień)
Konwersja Funkcja FormatNumber FORMACIE
Konwersja Funkcja FormatPercent FORMACIE
Konwersja Funkcja Str STR
Konwersja Funkcje konwersji typów EMITOWANIE i KONWERTOWANIE
Data/godzina Funkcja Date CURRENT_TIMESTAMP
Data/godzina Funkcja Day DATEFROMPARTS
Data/godzina Funkcja DateAdd DATEADD
Data/godzina Funkcja DateDiff DATEDIFF
DATEDIFF_BIG
Data/godzina Funkcja DatePart DATEPART
Data/godzina Funkcja DateSerial DATEFROMPARTS
Data/godzina Funkcja DateValue DATENAME
Data/godzina Funkcja Hour CZĘŚCI CZASOWE
Data/godzina Funkcja Minute CZĘŚCI CZASOWE
Data/godzina Funkcja Month MONTH (miesiąc)
Data/godzina Funkcja Now SYSDATETIME
Data/godzina Funkcja Second CZĘŚCI CZASOWE
Funkcja Time CZĘŚCI CZASOWE
Data/godzina Funkcja TimeSerial CZĘŚCI CZASOWE
Data/godzina Funkcja Weekday DATEPART
DATENAME
Data/godzina Funkcja Year YEAR (rok)
DATEFROMPARTS
Agregat domeny Funkcje DFirst, DLast FIRST_VALUE
LAST_VALUE
Matematyka Funkcja Abs ABS
Matematyka Funkcja Atn ATAN
ATN2
Matematyka Funkcja Cos COS
ACOS
Matematyka Funkcja Exp EXP
Matematyka Funkcje Int, Fix ZAOKR.W.DÓŁ
Matematyka Funkcja Log LOG
LOG10
Matematyka Funkcja Rnd LOS
Matematyka Funkcja Round ZAOKR
Matematyka Funkcja Sgn ZNAK.LICZBY
Matematyka Funkcja Sin SIN
Matematyka Funkcja Sqr SQRT
Przepływ sterowania programu Funkcja Choose WYBIERZ
Przepływ sterowania programu Funkcja IIf IIF
Statystyczne Funkcja Avg ŚREDNIA
Agregat SQL Funkcja Count ILE.LICZB
COUNT_BIG
Agregat SQL Funkcje Min i Max MIN
MAX
Agregat SQL Funkcje StDev i StDevP ODCH.STANDARDOWE
ODCH.STANDARD.POPUL
Agregat SQL Funkcja Sum SUMA
Agregat SQL Funkcje Var i VarP WARIANCJA
WARIANCJA.POPUL
Text (Tekst) Funkcja Format FORMACIE
Text (Tekst) Funkcja LCase LOWER
Text (Tekst) Funkcja Left LEWEJ
Text (Tekst) Funkcja Len
Text (Tekst) Funkcje LTrim, RTrim i Trim TRIM
LTRIM
RTRIM
Text (Tekst) Funkcja Replace ZASTĄPIĆ
Text (Tekst) Funkcja Right PRAWY
Text (Tekst) Funkcja StrReverse ODWRÓCIĆ
Text (Tekst) Funkcja UCase UPPER