Porovnání Access SQL s SQL Server TSQL

Platí pro
Access pro Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Pokud migrujete data Accessu do SQL Server nebo vytváříte řešení v Accessu s SQL Server jako back-end databází, je důležité, abyste znali rozdíly mezi SQL v Accessu a databází 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 Access SQL: základní koncepty, slovník a syntaxe a Referenční informace k 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ým sloupcem>]
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 porovnávání nebo vyhodnocování 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.
  • V SQL Server můžete použít možnost SET ANSI_NULLS OFF pro porovnávání přímých rovností s hodnotou NULL pomocí operátorů = and<>. 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 Server používáte primárně funkce CAST a CONVERT TSQL, i když existují i jiné převodní funkce 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 se první argument nazývá interval a je to řetězcový výraz, který vyžaduje uvozovky.

  • Na SQL Server má první argument název datepart a používá hodnoty klíčových slov, které nevyžadují uvozovky.

    Součást 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 dělat to, co chcete. TSQL má širokou škálu funkcí a je pro vás užitečné zjistit, co je k dispozici. Další informace najdete v tématu 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í Funkce Chr CHAR
Převodní Funkce Day DEN
Převodní Funkce FormatNumber FORMÁT
Převodní Funkce FormatPercent FORMÁT
Převodní Funkce Str Funkce STR
Převodní Funkce pro převody typu CAST a CONVERT
Datum a čas Funkce Date CURRENT_TIMESTAMP
Datum a čas Funkce Day DATEFROMPARTS
Datum a čas Funkce DateAdd DATEADD
Datum a čas Funkce DateDiff FUNKCE DATEDIFF
DATEDIFF_BIG
Datum a čas Funkce DatePart ČÁST DATU
Datum a čas Funkce DateSerial DATEFROMPARTS
Datum a čas Funkce DateValue NÁZEV KALENDÁŘE
Datum a čas Funkce Hour TIMEFROMPARTS
Datum a čas Funkce Minute TIMEFROMPARTS
Datum a čas Funkce Month MĚSÍC
Datum a čas Funkce Now SYSDATETIME
Datum a čas Funkce Second TIMEFROMPARTS
Funkce Time TIMEFROMPARTS
Datum a čas Funkce TimeSerial TIMEFROMPARTS
Datum a čas Funkce Weekday ČÁST DATU
NÁZEV KALENDÁŘE
Datum a čas Funkce Year ROK
DATEFROMPARTS
Domain Aggregate Funkce DFirst a DLast FIRST_VALUE
LAST_VALUE
Matematický zápis Funkce Abs ABS
Matematický zápis Funkce Atn ATAN
ATN2
Matematický zápis Funkce Cos COS
ACOS
Matematický zápis Funkce Exp EXP
Matematický zápis Funkce Int a Fix ZAOKR.DOLŮ
Matematický zápis Funkce Log LOG
LOG10
Matematický zápis Funkce Rnd NÁHČÍSLO
Matematický zápis Funkce Round ZAOKROUHLIT
Matematický zápis Funkce Sgn SIGN
Matematický zápis Funkce Sin SIN
Matematický zápis Funkce Sqr SQRT
Program Flow Funkce Choose ZVOLIT
Program Flow Funkce IIf IIF
Statistické Funkce Avg AVG
SQL Aggregate Funkce Count COUNT
COUNT_BIG
SQL Aggregate Funkce Min a Max MIN
MAX
SQL Aggregate Funkce StDev a StDevP SMODCH.VÝBĚR
SMODCH
SQL Aggregate Funkce Sum SUMA
SQL Aggregate Funkce Var a VarP VAR.VÝBĚR
VAR
Text Funkce Format FORMÁT
Text Funkce LCase LOWER
Text Funkce Left VLEVO
Text Funkce Len Funkce DÉLKA
Text Funkce LTrim, RTrim a Trim TRIM
LTRIM
Funkce RTRIM
Text Funkce Replace NAHRADIT
Text Funkce Right VPRAVO
Text Funkce StrReverse VRÁTIT ZPĚT
Text Funkce UCase UPPER