Porównanie języka SQL programu Access z językiem TSQL programu SQL Server
Applies ToAccess dla Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Jeśli przeprowadzasz migrację danych programu Access do programu SQL Server lub tworzysz rozwiązanie programu Access z programem SQL Server jako bazą danych zaplecza, ważne jest, aby poznać różnice między językami Access SQL i SQL Server 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 artykuły Język Access SQL: podstawowe pojęcia, słownictwo i składnia oraz Dokumentacja języka 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:

    • Test na wartość fałsz    WHERE Bitvalue = 0

    • Test na wartość prawda    WHERE Bitvalue <> 0

Wartości null

Wartość null to nie jest puste pole, które oznacza „brak jakiejkolwiek wartości”. Wartość null to symbol zastępczy, który oznacza, że brakuje danych lub są one nieznane. W systemach baz danych, które rozpoznają wartości null zaimplementowano „logikę trójwartościową”, co oznacza, że coś może mieć wartość prawda, fałsz lub mieć wartość nieznaną. Jeśli wartości null nie są poprawnie obsługiwane, możesz uzyskać nieprawidłowe wyniki podczas porównywania równości lub oceniania klauzul WHERE. 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 programie SQL Server możesz użyć opcji SET ANSI_NULLS OFF, aby uzyskać bezpośrednie porównania równości z wartością NULL przy użyciu operatorów = i <>. 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 można pominąć 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 programie SQL Server używasz głównie funkcji TSQL CAST i CONVERT, chociaż istnieją inne funkcje konwersji w przypadku specjalnych 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 interval i jest to wyrażenie ciągu wymagające cudzysłowu.

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

    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 funkcji TSQL, wówczas możesz zwykle utworzyć kolumnę obliczaną (termin języka TSQL użyty dla kolumny obliczeniowej), aby zrobić to, co chcesz. Język TSQL zawiera szeroką gamę funkcji i warto sprawdzić, co jest dostępne. Aby uzyskać więcej informacji, zobacz Jakie 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

Konwersja

Funkcja FormatNumber

FORMAT

Konwersja

Funkcja FormatPercent

FORMAT

Konwersja

Funkcja Str

STR

Konwersja

Funkcje konwersji typów

CAST i CONVERT

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

TIMEFROMPARTS

Data/Godzina

Funkcja Minute

TIMEFROMPARTS

Data/Godzina

Funkcja Month

MONTH

Data/Godzina

Funkcja Now

SYSDATETIME

Data/Godzina

Funkcja Second

TIMEFROMPARTS

Funkcja Time

TIMEFROMPARTS

Data/Godzina

Funkcja TimeSerial

TIMEFROMPARTS

Data/Godzina

Funkcja Weekday

DATEPART

DATENAME

Data/Godzina

Funkcja Year

YEAR

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

FLOOR

Matematyka

Funkcja Log

LOG

LOG10

Matematyka

Funkcja Rnd

RAND

Matematyka

Funkcja Round

ROUND

Matematyka

Funkcja Sgn

SIGN

Matematyka

Funkcja Sin

SIN

Matematyka

Funkcja Sqr

SQRT

Przepływ sterowania programu

Funkcja Choose

CHOOSE

Przepływ sterowania programu

Funkcja IIf

IIF

Statystyczne

Funkcja Avg

AVG

Agregat SQL

Funkcja Count

COUNT

COUNT_BIG

Agregat SQL

Funkcje Min i Max

MIN

MAX

Agregat SQL

Funkcje StDev i StDevP

STDEV

STDEVP

Agregat SQL

Funkcja Sum

SUM

Agregat SQL

Funkcje Var i VarP

VAR

VARP

Tekst

Funkcja Format

FORMAT

Tekst

Funkcja LCase

LOWER

Tekst

Funkcja Left

LEFT

Tekst

Funkcja Len

LEN

Tekst

Funkcje LTrim, RTrim i Trim

TRIM

LTRIM

RTRIM

Tekst

Funkcja Replace

REPLACE

Tekst

Funkcja Right

RIGHT

Tekst

Funkcja StrReverse

REVERSE

Tekst

Funkcja UCase

UPPER

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.