Pokud migrujete data Accessu na SQL Server nebo vytváříte řešení v Accessu s SQL Serverem jako back-end databází, je důležité, abyste znali rozdíly mezi SQL v Accessu a SQL Server Transact SQL (TSQL). Co následuje, jsou důležité varianty, které je potřeba znát, aby vaše řešení fungovalo podle očekávání.
Další informace najdete v článcích Jazyk SQL v Accessu: základní koncepty, slovník a syntaxe a Reference Transact-SQL.
Rozdíly v syntaxi a výrazech
Existuje několik rozdílů syntaxe a výrazů, které vyžadují konverzi. Následující tabulka shrnuje ty nejběžnější.
Rozdíl |
Access SQL |
SQL Server TSQL |
Atribut relační databáze |
Obvykle se nazývá pole |
Obvykle se nazývá sloupec |
Řetězcové literály |
Uvozovky ("), jako například "Jana H. Nová" |
Apostrof ('), jako například 'Jana H. Nová' |
Literály typu datum |
Křížek (#), například #1/1/2019# |
Apostrof ('), například '1/1/2019' |
Mnohonásobný zástupný znak |
Hvězdička (*), například "Kata*" |
Procento (%), například 'Kata%' |
Jednotlivý zástupný znak |
Otazník (?), například "Kata?" |
Podtržítko (_), například "Kata_" |
Operátor modulo |
Operátor MOD, například hodnota1 MOD hodnota2 |
Procento (%), například hodnota1 % hodnota2 |
Logické hodnoty |
WHERE Bitvalue = [True | False] nebo WHERE Bitvalue = [-1 | 0] |
WHERE Bitvalue = [1 | 0] |
Parametry |
[< název, který není definovaný sloupec >] nebo V zobrazení SQL použijte deklaraci parametrů SQL |
@ParamName |
Poznámky
-
Access používá uvozovky (") okolo názvů tabulek a objektů. T-SQL je může používat pro názvy tabulek s mezerami, ale není to standardní pojmenovávání. Ve většině případů by měl být název objektu přejmenován bez mezer, ale na nové názvy tabulek musí být přepsané i dotazy. Pro tabulky, které se nedají přejmenovat, ale které neodpovídají standardům pojmenovávání, použijte hranaté závorky []. Access také přidá okolo parametrů dotazů závorky navíc, které je ale možné v T-SQL odebrat.
-
Zvažte použití kanonického formátu kalendářního data, yyyy-mm-dd hh:nn:ss, což je standard ODBC pro data uložená jako znaky, které poskytují jednotný způsob, jak je znázornit napříč databázemi a zachovávají pořadí řazení dat.
-
Abyste se vyhnuli nejasnostem při porovnávání logických hodnot, můžete použít následující srovnání pro Access a SQL Server:
-
Testování hodnoty nepravda WHERE Bitvalue = 0
-
Testování hodnoty pravda WHERE Bitvalue <> 0
-
Hodnoty null
Hodnota null není prázdné pole, které znamená „vůbec žádná hodnota“. Hodnota null je zástupný symbol, který znamená, že data chybí nebo jsou neznámá. Databázové systémy, které rozpoznávají hodnoty null, implementují „logiku s třemi hodnotami“, což znamená, že se může jednat o hodnotu pravda, nepravda nebo neznámá. Pokud správně nezpracujete hodnoty null, můžete při provádění porovnávání nebo vyhodnocení klauzulí WHERE dostat nesprávné výsledky. Tady je porovnání o tom, jak Access a SQL Server zpracovávají hodnoty null.
Zakázaní hodnot null v tabulce
Ve výchozím nastavení jsou v Accessu a SQL serveru hodnoty null povoleny. Pokud chcete hodnoty null ve sloupci tabulky zakázat, udělejte toto:
-
V Accessu nastavte vlastnost pole Povinný na hodnotu Ano.
-
Na SQL Serveru přidejte atribut NOT NULL do sloupce v příkazu CREATE TABLE.
Testování hodnot null v klauzuli WHERE
Použijte predikáty porovnání funkcí IS NULL a IS NOT NULL:
-
V Accessu použijte funkci IS NULL nebo IS NOT NULL. Například:
SELECT … WHERE column IS NULL.
-
Na SQL Serveru použijte funkci IS NULL nebo IS NOT NULL. Například:
SELECT … WHERE field IS NULL
Převod hodnot null pomocí funkcí
Používejte funkce null k ochraně výrazů a vrácení alternativních hodnot:
-
V Accessu použijte funkci NZ (hodnota; [hodnotapřinull]), která vrací 0 nebo jinou hodnotu. Například:
SELECT AVG (NZ (Weight, 50) ) FROM Product
-
Na SQL Serveru použijte funkci ISNULL (Value, replacement_value), která vrací 0 nebo jinou hodnotu. Například:
SELECT AVG (ISNULL (Weight, 50)) FROM Product
Porozumění možnostem databáze
Některé databázové systémy mají speciální mechanismy:
-
V Accessu nejsou žádné možnosti databáze, které se týkají hodnoty null.
-
Na SQL Serveru můžete použít možnost SET ANSI_NULLS OFF k porovnávání přímých rovností s hodnotou NULL pomocí operátorů = a <>. Doporučujeme, abyste nepoužívali tuto možnost, protože už je zastaralá a může zmást jiné uživatele, kteří se spoléhají na zpracování hodnot null kompatibilně se standardem ISO.
Převod a přetypování
Pokaždé, když pracujete s daty nebo s programováním, je trvalá potřeba převádět datové typy z jednoho na jiný. Proces konverze může být jednoduchý nebo složitý. Mezi běžné problémy, na které je potřeba myslet patří: implicitní nebo explicitní převod, nastavení aktuálního data a regionálního času, zaokrouhlování nebo zkracování čísel a velikosti datových typů. Důkladné testování a potvrzování výsledků se nedá nahradit.
V Accessu můžete použít funkce pro konverzi typů, kterých je jedenáct pro každý datový typ a každý z nich začíná písmenem C. Pokud chcete například převést číslo s plovoucí desetinnou čárkou na řetězec:
CStr(437.324) returns the string "437.324".
Na SQL Serveru primárně používejte funkce TSQL CAST a CONVERT, i když jsou k dispozici jiné funkce pro převody pro specializované potřeby. Pokud chcete například převést číslo s plovoucí desetinnou čárkou na řetězec:
CONVERT(TEXT, 437.324) returns the string "437.324"
Funkce DateAdd, DateDiff a DatePart
Tyto běžně používané funkce dat jsou v Accessu a TSQL podobné (DateAdd, DateDiff a DatePart), ale použití prvního argumentu se liší.
-
V Accessu má první argument název intervala je to řetězcový výraz, který vyžaduje uvozovky.
-
Na SQL Serveru má první argument název datepart a používá hodnoty klíčových slov, které nevyžadují uvozovky.
Komponenta
Access
Server SQL
Rok
"yyyy"
year, yy, yyyy
Čtvrtletí
"q"
quarter, qq, q
Měsíc
"m"
month, mm, m
Den roku
"y"
dayofyear, dy, y
Den
"d"
day, dd, d
Týden
"ww"
wk, ww
Den týdne
"w"
weekday, dw
Hodina
"h"
hour, hh
Minuta
"n"
minute, mi, n
Sekunda
"s"
second, ss, s
Milisekunda
millisecond, ms
Porovnání funkcí
Dotazy Accessu můžou obsahovat počítané sloupce, které někdy získávají výsledky pomocí funkcí Accessu. Při migraci dotazů na SQL Server je potřeba nahradit tuto funkci Accessu pomocí ekvivalentní funkce TSQL, pokud je k dispozici. Pokud není žádná odpovídající funkce TSQL k dispozici, můžete obvykle vytvořit vypočítaný sloupec (termín TSQL používaný pro počítaný sloupec), který bude vykonávat požadovanou funkci. TSQL má širokou škálu funkcí a je pro vás užitečné zjistit, co je k dispozici. Další informace najdete v článku Co jsou funkce databáze SQL?.
V následující tabulce je uvedeno, která přístupová funkce odpovídá funkci TSQL.
Kategorie Accessu |
Funkce Accessu |
Funkce TSQL |
Převodní |
||
Převodní |
||
Převodní |
||
Převodní |
||
Převodní |
||
Převodní |
||
Datum a čas |
||
Datum a čas |
||
Datum a čas |
||
Datum a čas |
||
Datum a čas |
||
Datum a čas |
||
Datum a čas |
||
Datum a čas |
||
Datum a čas |
||
Datum a čas |
||
Datum a čas |
||
Datum a čas |
||
Datum a čas |
||
Datum a čas |
||
Datum a čas |
||
Domain Aggregate |
||
Matematické |
||
Matematické |
||
Matematické |
||
Matematické |
||
Matematické |
||
Matematické |
||
Matematické |
||
Matematické |
||
Matematické |
||
Matematické |
||
Matematické |
||
Program Flow |
||
Program Flow |
||
Statistické |
||
SQL Aggregate |
||
SQL Aggregate |
||
SQL Aggregate |
||
SQL Aggregate |
||
SQL Aggregate |
||
Textové |
||
Textové |
||
Textové |
||
Textové |
||
Textové |
||
Textové |
||
Textové |
||
Textové |
||
Textové |