Compararea Access SQL cu SQL Server TSQL

Se aplică la
Access pentru Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Dacă migrați datele 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 Declarația de parametri SQL
@ParamName

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 desăvălui valoarea falsă WHERE ValoareBiți = 0
    • Testați valoarea 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 baze de date care recunosc valori nule implementează "logică 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 de egalitate directă cu NULL utilizând = și <> operatori. 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ă niciun înlocuitor pentru 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 CAST și CONVERT TSQL, deși există alte funcții de conversie pentru necesități 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 parte dată și utilizează valori cheie care nu necesită ghilimele.

    Componentă Access 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 corespunzătoare, 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ă vedeți ce este disponibil. Pentru mai multe informații, consultați Care 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 NUME DATĂ CALENDARISTICĂ
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
NUME DATĂ CALENDARISTICĂ
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 MEDIE
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 STÂNGA
Text Funcția Len LEN
Text Funcțiile LTrim, Rtrim și Trim TRIM
LTRIM
RTRIM
Text Funcția Replace ÎNLOCUI
Text Funcția Right DREAPTA
Text Funcția StrReverse INVERSĂ
Text Funcția UCase UPPER