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 |
||
Conversie |
||
Conversie |
||
Conversie |
||
Conversie |
||
Conversie |
||
Dată/Oră |
||
Dată/Oră |
||
Dată/Oră |
||
Dată/Oră |
||
Dată/Oră |
||
Dată/Oră |
||
Dată/Oră |
||
Dată/Oră |
||
Dată/Oră |
||
Dată/Oră |
||
Dată/Oră |
||
Dată/Oră |
||
Dată/Oră |
||
Dată/Oră |
||
Dată/Oră |
||
Agregate de domeniu |
||
Matematică |
||
Matematică |
||
Matematică |
||
Matematică |
||
Matematică |
||
Matematică |
||
Matematică |
||
Matematică |
||
Matematică |
||
Matematică |
||
Matematică |
||
Flux de program |
||
Flux de program |
||
Statistice |
||
Agregate SQL |
||
Agregate SQL |
||
Agregate SQL |
||
Agregate SQL |
||
Agregate SQL |
||
Text |
||
Text |
||
Text |
||
Text |
||
Text |
||
Text |
||
Text |
||
Text |
||
Text |