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 vytvoříte řešení Accessu s back-endovou databází SQL Server, je důležité znát rozdíly mezi Accessem SQL 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 tématech Access SQL: základní koncepty, slovní zásoba a syntaxe aReferenční informace k jazyku 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:

    • Test nepravdivé hodnoty WHERE Bitvalue = 0
    • Test na pravdivou hodnotu WHERE Bitvalue <> 0

Hodnoty null

Hodnota null není prázdné pole, které znamená "žádná hodnota vůbec". Hodnota null je zástupný symbol, který znamená, že data chybí nebo jsou neznámá. Databázové systémy, které rozpoznají hodnoty null, implementují logiku se třemi hodnotami, což znamená, že něco může být pravdivé, nepravdivé nebo neznámé. Pokud správně nezpracováváte hodnoty null, můžete získat nesprávné výsledky při porovnávání rovnosti nebo vyhodnocování klauzulí WHERE. 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 přímé porovnání rovnosti 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ů. Neexistuje žádná náhrada za důkladné testování a potvrzení výsledků.

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".

V SQL Server používáte primárně funkce CAST a CONVERT TSQL, i když existují i jiné konverzní 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ímu argumentu říká interval a jedná se o řetězcový výraz, který vyžaduje uvozovky.

  • V SQL Server se první argument nazývá datepart a používá hodnoty klíčových slov, které nevyžadují uvozovky.

    Komponenty 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 neexistuje žádná odpovídající funkce TSQL, můžete obvykle vytvořit počítaný sloupec (termín TSQL používaný pro počítaný sloupec) a udělat tak, jak 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 STR
Převodní Funkce pro převody typu PŘETYPOVÁNÍ a PŘEVOD
Datum a čas Funkce Date CURRENT_TIMESTAMP
Datum a čas Funkce Day DATUMFROMPARTS
Datum a čas Funkce DateAdd DATEADD
Datum a čas Funkce DateDiff DATEDIFF
DATEDIFF_BIG
Datum a čas Funkce DatePart DATEPART
Datum a čas Funkce DateSerial DATUMFROMPARTS
Datum a čas Funkce DateValue DATENAME
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 DATEPART
DATENAME
Datum a čas Funkce Year ROK
DATUMFROMPARTS
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 PRŮMĚRNÁ
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 LEN
Text Funkce LTrim, RTrim a Trim TRIM
LTRIM
RTRIM
Text Funkce Replace NAHRADIT
Text Funkce Right PRÁVO
Text Funkce StrReverse REVERZNÍ
Text Funkce UCase UPPER