Compararea Access SQL cu SQL Server TSQL
Applies ToAccess pentru Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Dacă efectuați migrarea datelor Access la SQL Server sau creați o soluție Access cu SQL Server ca bază de date back-end, este esențial să cunoașteți diferențele dintre Access SQL și SQL Server Transact SQL (TSQL). Iată care sunt modificările importante pe care trebuie să le cunoașteți, astfel încât soluția să funcționeze așa cum doriți.

Pentru mai multe informații, consultați Access SQL: concepte de bază, vocabular și sintaxă și Referințe transact-SQL.

Diferențe de sintaxă și expresii

Există câteva diferențe de sintaxă și expresii care necesită conversie. Următorul tabel rezumă opțiunile cele mai obișnuite.

Diferență

Access SQL

SQL Server TSQL

Atribut bază de date relațională

De obicei, denumit câmp

De obicei, denumit coloană

Literali de tip șir

Ghilimele ("), cum ar fi "Mary Q. Contrary"

Apostrof ('), cum ar fi 'Mary Q. Contrary'.

Literali de tip dată

Semnul diez (#), cum ar fi #1/1/2019 #

Apostrof ('), cum ar fi '1/1/2019'

Caracter wildcard multiplu

Asterisc (*), cum ar fi "Cath*"

Procent (%), cum ar fi 'Cath%'

Caracter wildcard simplu

Semn de întrebare (?), cum ar fi "Cath?"

Caracter de subliniere (_), cum ar fi "Cath_"

Operator modulo

Operator MOD, cum ar fi Valoare1 MOD Valoare2

Procent (%), cum ar fi Valoare1 % Valoare2

Valori de tip boolean

WHERE ValoareBiți = [True | False]

Sau

WHERE ValoareBiți = [-1 | 0]

WHERE ValoareBiți = [1 | 0]

Parametri

[<Un nume care nu este o coloană definită>]

Sau

În vizualizarea SQL, utilizați Declararea parametrilor SQL

@NumeParam

Note   

  • Access utilizează ghilimele (") în jurul numelor de tabel și obiectelor. T-SQL le poate utiliza pentru numele de tabele cu spații, dar aceasta nu este o practică standard de numire. În majoritatea cazurilor, numele de obiecte ar trebui să fie redenumite fără spații, dar interogările trebuie, de asemenea, să fie rescrise pentru a reflecta noile nume de tabele. Utilizați paranteze drepte [ ] pentru tabele care nu pot fi redenumite, dar care nu sunt conforme cu standardele de denumire. Access adaugă și paranteze suplimentare în jurul parametrilor în interogări, dar acestea pot fi eliminate în T-SQL.

  • Gândiți-vă să utilizați formatul de dată canonic, yyyy-mm-dd hh:nn:ss, care este standardul ODBC pentru datele stocate sub formă de caractere care furnizează o modalitate consecventă de a le reprezenta între diverse baze de date și păstrează ordinea de sortare a datei.

  • Pentru a evita orice confuzie atunci când comparați valorile de tip boolean, puteți utiliza următoarea comparație pentru Access și SQL Server:

    • Testați pentru a detecta o valoare falsă    WHERE ValoareBiți = 0

    • Testați pentru a detecta o valoare adevărată    WHERE ValoareBiți <> 0

Valori nule

O valoare nulă nu este un câmp gol care înseamnă „nicio valoare”. O valoare nulă este un substituent care înseamnă că lipsesc date sau că sunt necunoscute. Sistemele de bază de date care recunosc valorile nule implementează „logica cu trei valori”, ceea ce înseamnă că ceva poate fi adevărat, fals sau necunoscut. Dacă nu gestionați corect valorile nule, puteți obține rezultate incorecte atunci când faceți comparații de egalitate sau evaluați clauzele WHERE. Iată o comparație privind modul în care Access și SQL Server gestionează valorile nule.

Dezactivarea valorilor nule dintr-un tabel

în Access și SQL Server, experiența implicită este că valorile nule sunt activate. Pentru a dezactiva valorile nule într-o coloană de tabel, procedați astfel:

  • În Access, setați proprietatea Obligatoriu a unui câmp la Da.

  • În SQL Server, adăugați atributul NOT NULL într-o coloană dintr-o instrucțiune CREATE TABLE.

Testați pentru a detecta valori nule într-o clauză WHERE

Utilizați predicatele de comparație IS NULL și IS NOT NULL:

  • În Access, utilizați IS NULL sau IS NOT NULL. De exemplu:

    SELECT … WHERE column IS NULL.
  • În SQL Server, utilizați IS NULL sau IS NOT NULL De exemplu:

    SELECT … WHERE field IS NULL

Conversia valorilor nule cu funcții

Utilizați funcțiile nule pentru a vă proteja expresiile și a returna valori alternative:

  • În Access, utilizați funcția NZ (value, [valueifnull]), care returnează valoarea 0 sau altă valoare. De exemplu:

    SELECT AVG (NZ (Weight, 50) ) FROM Product
  • În SQL Server, utilizați funcția ISNULL (Value, replacement_value), care returnează valoarea 0 sau altă valoare. De exemplu:

    SELECT AVG (ISNULL (Weight, 50)) FROM Product

Înțelegerea opțiunilor pentru baza de date

Unele sisteme de bază de date au mecanisme proprietare:

  • În Access, nu există nicio opțiune de bază de date care să corespundă cu Null.

  • În SQL Server puteți utiliza opțiunea SET ANSI_NULLS OFF pentru comparații directe de egalitate cu NULL utilizând operatorii = și < >. Vă recomandăm să evitați utilizarea acestei opțiuni, deoarece este perimată și poate deruta pe cei care se bazează pe tratarea compatibilă ISO a valorilor nule.

Conversie și casting

De fiecare dată când lucrați cu date sau programare, există o necesitate continuă de a efectua conversie de la un tip de date la altul. Procesul de conversie poate fi simplu sau complex. Problemele uzuale la care trebuie să vă gândiți sunt: conversie implicită sau explicită, setări regionale pentru dată și oră, rotunjirea sau trunchierea numerelor și dimensiunile tipului de date. Nu există nicio alternativă la testarea detaliată și confirmarea rezultatelor.

În Access, puteți utiliza Funcții de conversie a tipului de date, care sunt unsprezece, fiecare începând cu litera C, câte una pentru fiecare tip de date. De exemplu, pentru a efectua conversia unui număr în virgulă mobilă într-un șir:

CStr(437.324) returns the string "437.324".

În SQL Server, utilizați în principal funcțiile TSQL CAST și CONVERT, deși există alte Funcții de conversie pentru cerințe specializate. De exemplu, pentru a efectua conversia unui număr în virgulă mobilă într-un șir:

CONVERT(TEXT, 437.324) returns the string "437.324"

Funcții DateAdd, DateDiff și DatePart

Aceste funcții de dată utilizate frecvent sunt similare (DateAdd, DateDiff și DatePart) în Access și TSQL, dar utilizarea primului argument diferă.

  • În Access, primul argument se numește intervalși este o expresie șir care necesită ghilimele.

  • În SQL Server, primul argument se numește datepart și folosește cuvinte-cheie care nu necesită ghilimele.

    Componentă

    Acces

    SQL Server

    An

    "yyyy"

    year, yy, yyyy

    Trimestru

    "q"

    quarter, qq, q

    Lună

    "m"

    month, mm, m

    Zi din an

    "y"

    dayofyear, dy, y

    Zi

    "d"

    day, dd, d

    Săptămână

    "ww"

    wk, ww

    Ziua săptămânii

    "w"

    weekday, dw

    Oră

    "h"

    hour, hh

    Minut

    "n"

    minute, mi, n

    Secundă

    "s"

    second, ss, s

    Milisecundă

    millisecond, ms

Comparație între funcții

Interogările Access pot conține coloane calculate care uneori utilizeazăFuncții Access pentru a obține rezultate. Atunci când efectuați migrarea interogărilor la SQL Server, trebuie să înlocuiți funcția Access cu o funcție TSQL echivalentă, dacă este disponibilă una. Dacă nu există nicio funcție TSQL corespondentă, puteți, de obicei, să creați o coloană calculată (termenul TSQL utilizat pentru o coloană calculată) pentru a face ceea ce doriți. TSQL are o gamă largă de funcții și este în avantajul dvs. să aflați ce este disponibil. Pentru mai multe informații, consultațiCare sunt funcțiile bazei de date SQL?.

Următorul tabel arată care funcție de Access are o funcție TSQL corespunzătoare.

Categorie Access

Funcția Access

Funcția TSQL

Conversie

Funcția Chr

CHAR

Conversie

Funcția Day

DAY

Conversie

Funcția FormatNumber

FORMAT

Conversie

Funcția FormatPercent

FORMAT

Conversie

Funcția Str

STR

Conversie

Funcții de conversie a tipului de date

CAST și CONVERT

Dată/Oră

Funcția Date

CURRENT_TIMESTAMP

Dată/Oră

Funcția Day

DATEFROMPARTS

Dată/Oră

Funcția DateAdd

DATEADD

Dată/Oră

Funcția DateDiff

DATEDIFF

DATEDIFF_BIG

Dată/Oră

Funcția DatePart

DATEPART

Dată/Oră

Funcția DateSerial

DATEFROMPARTS

Dată/Oră

Funcția DateValue

DATENAME

Dată/Oră

Funcția Hour

TIMEFROMPARTS

Dată/Oră

Funcția Minute

TIMEFROMPARTS

Dată/Oră

Funcția Month

MONTH

Dată/Oră

Funcția Now

SYSDATETIME

Dată/Oră

Funcția Second

TIMEFROMPARTS

Funcția Time

TIMEFROMPARTS

Dată/Oră

Funcția TimeSerial

TIMEFROMPARTS

Dată/Oră

Funcția Weekday

DATEPART

DATENAME

Dată/Oră

Funcția Year

YEAR

DATEFROMPARTS

Agregate de domeniu

Funcțiile DFirst, DLast

FIRST_VALUE

LAST_VALUE

Matematică

Funcția Abs

ABS

Matematică

Funcția Atn

ATAN

ATN2

Matematică

Funcția Cos

COS

ACOS

Matematică

Funcția Exp

EXP

Matematică

Funcțiile Int, Fix

FLOOR

Matematică

Funcția Log

LOG

LOG10

Matematică

Funcția Rnd

RAND

Matematică

Funcția Round

ROUND

Matematică

Funcția Sgn

SIGN

Matematică

Funcția Sin

SIN

Matematică

Funcția Sqr

SQRT

Flux de program

Funcția Choose

CHOOSE

Flux de program

Funcția IIf

IIF

Statistice

Funcția Avg

AVG

Agregate SQL

Funcția Count

COUNT

COUNT_BIG

Agregate SQL

Funcțiile Min, Max

MIN

MAX

Agregate SQL

Funcțiile StDev, StDevP

STDEV

STDEVP

Agregate SQL

Funcția Sum

SUM

Agregate SQL

Funcțiile Var, VarP

VAR

VARP

Text

Funcția Format

FORMAT

Text

Funcția LCase

LOWER

Text

Funcția Left

LEFT

Text

Funcția Len

LEN

Text

Funcțiile LTrim, Rtrim și Trim

TRIM

LTRIM

RTRIM

Text

Funcția Replace

REPLACE

Text

Funcția Right

RIGHT

Text

Funcția StrReverse

REVERSE

Text

Funcția UCase

UPPER

Aveți nevoie de ajutor suplimentar?

Doriți mai multe opțiuni?

Explorați avantajele abonamentului, navigați prin cursurile de instruire, aflați cum să vă securizați dispozitivul și multe altele.

Comunitățile vă ajută să adresați întrebări și să răspundeți la întrebări, să oferiți feedback și să primiți feedback de la experți cu cunoștințe bogate.