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 syntax a Odkaz 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 |
||
Konverzia |
||
Konverzia |
||
Konverzia |
||
Konverzia |
||
Konverzia |
||
Dátum a čas |
||
Dátum a čas |
||
Dátum a čas |
||
Dátum a čas |
||
Dátum a čas |
||
Dátum a čas |
||
Dátum a čas |
||
Dátum a čas |
||
Dátum a čas |
||
Dátum a čas |
||
Dátum a čas |
||
Dátum a čas |
||
Dátum a čas |
||
Dátum a čas |
||
Dátum a čas |
||
Doménové agregačné funkcie |
||
Matematické funkcie |
||
Matematické funkcie |
||
Matematické funkcie |
||
Matematické funkcie |
||
Matematické funkcie |
||
Matematické funkcie |
||
Matematické funkcie |
||
Matematické funkcie |
||
Matematické funkcie |
||
Matematické funkcie |
||
Matematické funkcie |
||
Funkcie priebehu programu |
||
Funkcie priebehu programu |
||
Štatistické funkcie |
||
Agregačné SQL |
||
Agregačné SQL |
||
Agregačné SQL |
||
Agregačné SQL |
||
Agregačné SQL |
||
Text |
||
Text |
||
Text |
||
Text |
||
Text |
||
Text |
||
Text |
||
Text |
||
Text |