Access SQL a SQL Server TSQL – porovnanie
Applies ToAccess pre Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Ak migrujete údaje Accessu do SQL Servera alebo vytvoríte riešenie Accessu s SQL Serverom ako serverovou databázou, je dôležité, aby ste poznali rozdiely medzi Transact SQL (TSQL) Accessu SQL a SQL Servera. Nasledujú dôležité variácie, ktoré treba poznať, aby vaše riešenie fungovalo podľa očakávania.

Ďalšie informácie nájdete v témach Jazyk SQL programu Access: základné koncepty, slovník a syntaxOdkaz na Transact-SQL.

Rozdiely syntaxe a výrazov

Medzi syntaxami a výrazmi existujú určité rozdiely, ktoré vyžadujú konverziu. Nasledujúca tabuľka obsahuje súhrn tých najbežnejších.

Rozdiel

Access SQL

SQL Server TSQL

Atribút relačnej databázy

Zvyčajne sa nazýva pole

Zvyčajne sa nazýva stĺpec

Reťazcové literály

Úvodzovky ("), napríklad "Mária Ďuríčková"

Apostrof ('), napríklad 'Mária Ďuríčková'

Znakové raťazce dátumu

Znak libry (#), napríklad #1/1/2019#

Apostrof ('), napríklad '1/1/2019'

Viaceré zástupné znaky

Hviezdička (*), napríklad "Katka*"

Percento (%), napríklad "Katka%"

Jeden zástupný znak

Otáznik (?), napríklad "Katka?"

Znak podčiarknutia (_), napríklad "Katka_"

Operátor modulo

Operátor MOD, napríklad Hodnota1 MOD Hodnota2

Percento (%), napríklad Hodnota1 % Hodnota2

Booleovské hodnoty

WHERE Bitvalue = [True | False]

Alebo

WHERE Bitvalue = [-1 | 0]

WHERE Bitvalue = [1 | 0]

Parametre

[<Názov, ktorý nie je definovaným stĺpcom>]

Alebo

V zobrazení SQL deklaráciu SQL Parameters

@ParamName

Poznámky   

  • Program Access používa úvodzovky (") v prípade názvov a objektov tabuliek. V T-SQL sa môžu použiť pri názvoch tabuliek s medzerami, ale nie je to štandardný postup pomenovania. Názvy objektov by sa vo väčšine prípadov mali premenovať bez medzier, ale dotazy sa tiež musia prepísať, aby zohľadňovali nové názvy tabuliek. Hranaté zátvorky [ ] použite v prípade tabuliek, ktoré nie je možné premenovať, ale ktoré nespĺňajú normy pomenovania. Access pridáva aj ďalšie zátvorky okolo parametrov v dotazoch, ale dajú sa odstrániť v T-SQL.

  • Zvážte použitie kanonického formátu dátumu, rrrr-mm-dd hh:nn:ss, čo je štandard ODBC pre dátumy uložené ako znaky, ktorý poskytuje konzistentný spôsob ich zastúpenia v databázach a zachováva spôsob zoradenia dátumu.

  • Ak sa chcete vyhnúť zmätkom pri porovnávaní booleovských hodnôt, môžete použiť nasledujúce porovnanie pre Access a SQL Server:

    • Test hodnoty False    WHERE Bitvalue = 0

    • Test hodnoty True    WHERE Bitvalue <> 0

Nulové hodnoty

Hodnota null nie je prázdne pole, ktoré nepredstavuje vôbec žiadnu hodnotu. Hodnota null je zástupný objekt, ktorý znamená, že údaje chýbajú alebo sú neznáme. Databázové systémy, ktoré rozpoznajú hodnoty null, implementujú logiku s tromi hodnotami, čo znamená, že niečo môže byť pravdivé, nepravdivé alebo neznáme. Ak nepracujete s nulovými hodnotami správne, môžete dostať nesprávne výsledky pri vykonaní porovnania rovnosti alebo vyhodnotení klauzúl WHERE. Tu je porovnanie toho, ako Access a SQL Server spracujú hodnoty null.

Zakázanie hodnôt null v tabuľke

V Accesse a SQL Serveri sú hodnoty null predvolene povolené. Ak chcete zakázať hodnoty null v stĺpci tabuľky, postupujte takto:

  • V Accesse nastavte vlastnosť poľa Povinné na hodnotu Áno.

  • V SQL Serveri do stĺpca v príkaze CREATE TABLE pridajte atribút NOT NULL.

Test hodnôt null v klauzule WHERE

Použite predikáty porovnania IS NULL a IS NOT NULL:

  • V Accesse použite IS NULL alebo IS NOT NULL. Príklad:

    SELECT … WHERE column IS NULL.
  • V SQL Serveri použite IS NULL alebo IS NOT NULL. Príklad:

    SELECT … WHERE field IS NULL

Konvertovanie hodnôt null s funkciami

Ak chcete chrániť výrazy a vrátiť alternatívne hodnoty, použite funkcie s hodnotou null:

  • V Accesse použite funkciu NZ (hodnota; [hodnota_ak_null]), ktorá vráti hodnotu 0 alebo inú hodnotu. Príklad:

    SELECT AVG (NZ (Weight, 50) ) FROM Product
  • V SQL Serveri použite funkciu ISNULL(hodnota; náhradná_hodnota), ktorá vráti hodnotu 0 alebo inú hodnotu. Príklad:

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

Informácie o možnostiach databázy

Niektoré databázové systémy majú vlastné mechanizmy:

  • V Accesse nie sú k dispozícii žiadne možnosti databázy, ktoré súvisia s hodnotou null.

  • V SQL Serveri môžete použiť možnosť SET ANSI_NULLS OFF na priame porovnanie rovnosti s hodnotou NULL pomocou operátorov = a <>. Odporúčame, aby ste sa vyhli použitiu tejto možnosti, pretože sa už nevyužíva, a môžu zmiasť ostatných používateľov, ktorí závisia od spracovania hodnôt null v súlade s normou ISO.

Konverzia a vysielanie

Vždy, keď pracujete s údajmi alebo programujete, existuje trvalá potreba konverzie z jedného typu údajov na iný. Proces konverzie môže byť jednoduchý alebo zložitý. Najčastejšie problémy, na ktoré je treba myslieť, sú tieto: implicitná alebo explicitná konverzia, aktuálne regionálne nastavenie dátumu a času, zaokrúhľovanie alebo skracovanie čísel a veľkosti typov údajov. Neexistuje alternatíva podrobného testovania a potvrdenia výsledkov.

V Accesse používate funkcie na konverziu typu údajov, ktorých tam je jedenásť, pričom každá začína písmenom C a pre každý typ údajov je jedna. Ak chcete napríklad konvertovať číslo s pohyblivou desatinnou čiarkou na reťazec:

CStr(437.324) returns the string "437.324".

V SQL Serveri primárne použijete funkcie TSQL CAST a CONVERT, hoci existujú aj ďalšie funkcie konverzie na špeciálne potreby. Ak chcete napríklad konvertovať číslo s pohyblivou desatinnou čiarkou na reťazec:

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

DateAdd, DateDiff a DatePart (funkcie)

Tieto bežne používané funkcie DATE sú podobné (DateAdd, DateDiff a DatePart) v Accesse a TSQL, ale použitie prvého argumentu sa líši.

  • V Accesse sa prvý argument nazýva interval a ide o reťazcový výraz, ktorý vyžaduje úvodzovky.

  • V SQL Serveri sa prvý argument nazýva datepart a používa hodnoty kľúčových slov, ktoré nevyžadujú úvodzovky.

    Súčasť

    Access

    SQL Server

    Rok

    "yyyy"

    rok, yy, yyyy

    Štvrťrok

    "q"

    štvrťrok, qq, q

    Mesiac

    "m"

    mesiac, mm, m

    Deň v roku

    "y"

    deňroka, dy, y

    Deň

    "d"

    deň, dd, d

    Týždeň

    "ww"

    týždeň, ww

    Deň v týždni

    "w"

    pracovný deň, dw

    Hodina

    "h"

    hodina, hh

    Minúta

    "n"

    minúta, mi, n

    Sekunda

    "s"

    sekunda, ss, s

    Milisekunda

    milisekunda, ms

Porovnanie funkcií

Dotazy Accessu môžu obsahovať vypočítavané stĺpce, ktoré v niektorých prípadoch na získanie výsledkov používajú funkcie Accessu. Pri migrácii dotazov na SQL Server musíte nahradiť funkciu Accessu ekvivalentnou funkciou TSQL, ak je k dispozícii. Ak nie je k dispozícii žiadna zodpovedajúca funkcia TSQL, môžete zvyčajne vytvoriť vypočítaný stĺpec (výraz v rámci TSQL používaný pre vypočítavaný stĺpec) a vykonať požadované akcie. TSQL obsahuje širokú škálu funkcií a je dobré vedieť, aké sú k dispozícii. Ďalšie informácie nájdete v téme Akú sú funkcie databázy SQL?

V nasledujúcej tabuľke je uvedené, ktoré funkcie Accessu majú zodpovedajúcu funkciu TSQL.

Kategória prístupu

Funkcia Accessu

Funkcia TSQL

Konverzia

Funkcia Chr

CHAR

Konverzia

Funkcia Day

DAY

Konverzia

Funkcia FormatNumber

FORMAT

Konverzia

Funkcia FormatPercent

FORMAT

Konverzia

Funkcia Str

STR

Konverzia

Funkcie na konverziu typu údajov

CAST a CONVERT

Dátum a čas

Funkcia Date

CURRENT_TIMESTAMP

Dátum a čas

Funkcia Day

DATEFROMPARTS

Dátum a čas

Funkcia DateAdd

DATEADD

Dátum a čas

Funkcia DateDiff

DATEDIFF

DATEDIFF_BIG

Dátum a čas

Funkcia DatePart

DATEPART

Dátum a čas

Funkcia DateSerial

DATEFROMPARTS

Dátum a čas

Funkcia DateValue

DATENAME

Dátum a čas

Funkcia Hour

TIMEFROMPARTS

Dátum a čas

Funkcia Minute

TIMEFROMPARTS

Dátum a čas

Funkcia Month

MONTH

Dátum a čas

Funkcia Now

SYSDATETIME

Dátum a čas

Funkcia Second

TIMEFROMPARTS

Funkcia Time

TIMEFROMPARTS

Dátum a čas

Funkcia TimeSerial

TIMEFROMPARTS

Dátum a čas

Funkcia Weekday

DATEPART

DATENAME

Dátum a čas

Funkcia Year

YEAR

DATEFROMPARTS

Doménové agregačné funkcie

Funkcie DFirst a DLast

FIRST_VALUE

LAST_VALUE

Matematické funkcie

Funkcia Abs

ABS

Matematické funkcie

Funkcia Atn

ATAN

ATN2

Matematické funkcie

Funkcia Cos

COS

ACOS

Matematické funkcie

Funkcia Exp

EXP

Matematické funkcie

Funkcie Int a Fix

FLOOR

Matematické funkcie

Funkcia Log

LOG

LOG10

Matematické funkcie

Funkcia Rnd

RAND

Matematické funkcie

Funkcia Round

ROUND

Matematické funkcie

Funkcia Sgn

SIGN

Matematické funkcie

Funkcia Sin

SIN

Matematické funkcie

Funkcia Sqr

SQRT

Funkcie priebehu programu

Funkcia Choose

CHOOSE

Funkcie priebehu programu

Funkcia IIf

IIF

Štatistické funkcie

Funkcia Avg

AVG

Agregačné SQL

Funkcia Count

COUNT

COUNT_BIG

Agregačné SQL

Funkcie Min, Max

MIN

MAX

Agregačné SQL

Funkcie StDev a StDevP

STDEV

STDEVP

Agregačné SQL

Funkcia Sum

SUM

Agregačné SQL

Funkcie Var a VarP

VAR

VARP

Text

Funkcia Format

FORMAT

Text

Funkcia LCase

LOWER

Text

Funkcia Left

LEFT

Text

Funkcia Len

LEN

Text

Funkcie LTrim, RTrim a Trim

TRIM

LTRIM

RTRIM

Text

Funkcia Replace

REPLACE

Text

Funkcia Right

RIGHT

Text

Funkcia StrReverse

REVERSE

Text

Funkcia UCase

UPPER

Potrebujete ďalšiu pomoc?

Chcete ďalšie možnosti?

Môžete preskúmať výhody predplatného, prehľadávať školiace kurzy, naučiť sa zabezpečiť svoje zariadenie a ešte oveľa viac.

Komunity pomôžu s kladením otázok a odpovedaním na ne, s poskytovaním pripomienok a so získavaním informácií od odborníkov s bohatými znalosťami.