Porovnání Accessového SQL s SQL Serverem TSQL
Applies ToAccess pro Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

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í

Funkce Chr

CHAR

Převodní

Funkce Day

DAY

Převodní

Funkce FormatNumber

FORMAT

Převodní

Funkce FormatPercent

FORMAT

Převodní

Funkce Str

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

DATEDIFF

DATEDIFF_BIG

Datum a čas

Funkce DatePart

DATEPART

Datum a čas

Funkce DateSerial

DATEFROMPARTS

Datum a čas

Funkce DateValue

DATENAME

Datum a čas

Funkce Hour

TIMEFROMPARTS

Datum a čas

Funkce Minute

TIMEFROMPARTS

Datum a čas

Funkce Month

MONTH

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

YEAR

DATEFROMPARTS

Domain Aggregate

Funkce DFirst a DLast

FIRST_VALUE

LAST_VALUE

Matematické

Funkce Abs

ABS

Matematické

Funkce Atn

ATAN

ATN2

Matematické

Funkce Cos

COS

ACOS

Matematické

Funkce Exp

EXP

Matematické

Funkce Int a Fix

FLOOR

Matematické

Funkce Log

LOG

LOG10

Matematické

Funkce Rnd

RAND

Matematické

Funkce Round

ROUND

Matematické

Funkce Sgn

SIGN

Matematické

Funkce Sin

SIN

Matematické

Funkce Sqr

SQRT

Program Flow

Funkce Choose

CHOOSE

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

STDEV

STDEVP

SQL Aggregate

Funkce Sum

SUM

SQL Aggregate

Funkce Var a VarP

VAR

VARP

Textové

Funkce Format

FORMAT

Textové

Funkce LCase

LOWER

Textové

Funkce Left

LEFT

Textové

Funkce Len

LEN

Textové

Funkce LTrim, RTrim a Trim

TRIM

LTRIM

RTRIM

Textové

Funkce Replace

REPLACE

Textové

Funkce Right

RIGHT

Textové

Funkce StrReverse

REVERSE

Textové

Funkce UCase

UPPER

Potřebujete další pomoc?

Chcete další možnosti?

Prozkoumejte výhody předplatného, projděte si školicí kurzy, zjistěte, jak zabezpečit své zařízení a mnohem více.

Komunity vám pomohou klást otázky a odpovídat na ně, poskytovat zpětnou vazbu a vyslechnout odborníky s bohatými znalostmi.