Ako migrirate Access podatke u SQL Server ili kreirate Access rešenje sa sistemom SQL Server kao pozadinskom bazom podataka, važno je da znate razlike između Access SQL i SQL Server Transact SQL (TSQL). Slede važne varijacije koje treba da znate da bi rešenje funkcionisalo kao što je predviđeno.
Više informacija potražite u člancima Access SQL: osnovni koncepti, rečnik i sintaksai Transact-SQL referenca.
Razlike u sintaksi i izrazima
Postoji nekoliko razlika u sintaksi i izrazima koje zahtevaju konverziju. Sledeća tabela navodi najčešće razlike.
Razlika |
Access SQL |
SQL Server TSQL |
Atribut relacione baze podataka |
Obično se naziva polje |
Obično se naziva kolona |
Doslovne niske |
Znaci navoda ("), kao na primer "Meri Q. Suprotno" |
Apostrof ('), kao na primer 'Meri Q. Suprotno' |
Doslovni datumi |
Znak funte (#), kao na primer #1/1/2019# |
Apostrof ('), kao na primer '1/1/2019' |
Više džoker znakova |
Zvezdica (*), kao na primer "Cath *" |
Procenat (%), kao na primer "Cath%" |
Jedan džoker znak |
Znak pitanja (?), kao na primer "Cath?" |
Donja crta (_), kao na primer "Cath_" |
Modulo operator |
MOD operater, kao što je Vrednost1 MOD Vrednost2 |
Procenat (%), kao što je Vrednost1 % Vrednost2 |
Logičke vrednosti |
WHERE Bitvalue = [True | False] Ili WHERE Bitvalue = [-1 | 0] |
WHERE Bitvalue = [1 | 0] |
Parametri |
[< ime koje nije definisana kolona >] Ili U SQL prikazu, koristite Deklaraciju SQL parametara |
@ParamName |
Napomene
-
Access koristi znake navoda (") oko imena tabele i objekata. T-SQL može da ih koristi za imena tabela sa razmacima, ali to nije standardna praksa za imenovanje. U većini slučajeva, imena objekata treba da se preimenuju tako da ne sadrže razmake, ali upiti moraju takođe da se ponovo napišu da bi odražavali nova imena tabela. Koristite zagrade [ ] za tabele koje se ne mogu preimenovati, ali koje nisu usklađene sa standardom za imenovanje. Access dodaje i dodatne zagrade oko parametara u upitima, ali one mogu da se uklone u programu T-SQL.
-
Razmislite o korišćenju kanonskog formata datuma, yyyy-mm-dd hh:nn:ss, koji predstavlja ODBC standard za datume uskladištene u vidu znakova i koji obezbeđuje dosledan način za njihovo predstavljanje kroz baze podataka i čuva redosled sortiranja datuma.
-
Da biste izbegli konfuziju pri poređenju logičkih vrednosti, možete da koristite sledeće poređenje za Access i SQL Server:
-
Testiranje netačne vrednosti WHERE Bitvalue = [0 | 0]
-
Testiranje tačne vrednosti WHERE Bitvalue <> 0
-
Bez vrednosti
Vrednost „nula” nije prazno polje koje znači „nema vrednosti“. Vrednost „nula” je čuvar mesta koji označava podatke koji nedostaju ili su nepoznati. Sistemi baze podataka koji prepoznaju vrednosti „nula” primenjuju „trodimenzionalnu logiku”, što znači da nešto može da bude tačno, netačno ili nepoznato. Ako ne rukujete ispravno vrednostima „nula”, možete da dobijete netačne rezultate kada pravite poređenje po jednakosti ili procenjujete WHERE odredbe. Evo poređenja načina na koji Access i SQL Server rade sa vrednostima „nula”.
Onemogućavanje vrednosti „nula” u tabeli
u programu Access i SQL Server podrazumevano je da su omogućene vrednosti „nula”. Da biste onemogućili vrednosti „nula” u koloni tabele, uradite sledeće:
-
U programu Access, postavite Obavezno svojstvo polja na vrednost „Da”.
-
U sistemu SQL Server, dodajte atribut NOT NULL u kolonu u izjavi CREATE TABLE.
Testiranje vrednosti „nula” u odredbi WHERE
Upotreba „IS NULL” i „IS NOT NULL” predikate poređenja:
-
U programu Access, koristite „IS NULL” ili „IS NOT NULL”. Na primer:
SELECT … WHERE column IS NULL.
-
U sistemu SQL server, koristite „IS NULL” ili „IS NOT NULL”. Na primer:
SELECT … WHERE field IS NULL
Konverzija vrednosti „nula” pomoću funkcija
Koristite funkcije NULL za zaštitu izraza i vraćanje alternativnih vrednosti:
-
U programu Access koristite funkciju NZ (value, [valueifnull]) koja daje 0 ili drugu vrednost. Na primer:
SELECT AVG (NZ (Weight, 50) ) FROM Product
-
U sistemu SQL Server koristite funkciju ISNULL(Value, replacement_value) koja daje 0 ili drugu vrednost. Na primer:
SELECT AVG (ISNULL (Weight, 50)) FROM Product
Razumevanje opcija baze podataka
Neki sistemi baze podataka imaju vlasničke mehanizme:
-
U programu Access ne postoje opcije baze podataka koje se odnose na nulu.
-
U sistemu SQL Server možete da koristite opciju „SET ANSI_NULLS OFF” za direktno poređenje jednakosti sa nulom korišćenjem operatora = i <>. Preporučujemo da izbegnete korišćenje ove opcije zato što je ona zastarela i može da zbuni druge koji se oslanjaju na rukovanje nulom usaglašeno sa ISO standardom.
Konverzija i kasting
Svaki put kada radite sa podacima ili programirate, postoji stalna potreba za konvertovanjem iz jednog tipa podataka u drugi. Proces konverzije može da bude jednostavan ili kompleksan. Uobičajeni problemi o kojima treba da razmišljate jesu: implicitna ili eksplicitna konverzija, tekuće regionalne postavke datuma i vremena, zaokruživanja ili skraćivanje brojeva i veličina tipa podataka. Nema zamene za detaljno testiranje i potvrdu rezultata.
U programu Access koristite funkcije za konvertovanje tipova, kojih ima jedanaest, svaka od njih počinje slovom C, po jedna za svaki tip podataka. Na primer, da biste broj sa pokretnim zarezom pretvorili u niz:
CStr(437.324) returns the string "437.324".
U sistemu SQL Server, uglavnom koristite CAST i CONVERT TSQL funkcije, mada postoje i druge funkcije za konvertovanje za specijalizovane potrebe. Na primer, da biste broj sa pokretnim zarezom pretvorili u niz:
CONVERT(TEXT, 437.324) returns the string "437.324"
Funkcije „DateAdd”, „DateDiff” i „DatePart”
Ove najčešće korišćene funkcije za datum su slične (DateAdd, DateDiff i DatePart) u programu Access i TSQL, ali se razlikuje upotreba prvog argumenta.
-
U programu Access, prvi argument se naziva intervali predstavlja izraz niza koji zahteva navodnike.
-
U sistemu SQL Server, prvi argument se naziva dateparti on koristi vrednosti ključne reči koje ne zahtevaju navodnike.
Komponenta
Access
SQL Server
Godina
„yyyy”
year, yy, yyyy
Kvartal
„q”
kvartal, qq, q
Mesec
„m”
month, mm, m
Dan u godini
„y”
dayofyear, dy, y
Dan
„d”
day, dd, d
Sedmica
„ww”
wk, ww
Dan sedmice
„w“
weekday, dw
Čas
„h“
hour, hh
Minut
„n”
minute, mi, n
Sekunda
„s“
second, ss, s
Milisekunda
millisecond, ms
Poređenje funkcija
Access upiti mogu da sadrže izračunate kolone koje ponekad koriste Access funkcije da dobiju rezultate. Kada migrirate upite u SQL Server, morate da zamenite Access funkciju sa ekvivalentom TSQL funkcijom ako je dostupna. Ako ne postoji odgovarajuća TSQL funkcija, obično možete da kreirate izračunatu kolonu (TSQL termin koji se koristi za izračunatu kolonu) da biste uradili ono što želite. TSQL ima široku lepezu funkcija vrlo je korisno da vidite šta je dostupno. Više informacija potražite u članku Šta su to funkcije SQL baze podataka?.
Sledeća tabela prikazuje koja Access funkcija ima odgovarajuću TSQL funkciju.
Kategorija Access |
Funkcija Access |
TSQL funkcija |
Konvertovanje |
||
Konvertovanje |
||
Konvertovanje |
||
Konvertovanje |
||
Konvertovanje |
||
Konvertovanje |
||
Datum/vreme |
||
Datum/vreme |
||
Datum/vreme |
||
Datum/vreme |
||
Datum/vreme |
||
Datum/vreme |
||
Datum/vreme |
||
Datum/vreme |
||
Datum/vreme |
||
Datum/vreme |
||
Datum/vreme |
||
Datum/vreme |
||
Datum/vreme |
||
Datum/vreme |
||
Datum/vreme |
||
Skup domena |
||
Matematika |
||
Matematika |
||
Matematika |
||
Matematika |
||
Matematika |
||
Matematika |
||
Matematika |
||
Matematika |
||
Matematika |
||
Matematika |
||
Matematika |
||
Tok programa |
||
Tok programa |
||
Statističke |
||
SQL Aggregate |
||
SQL Aggregate |
||
SQL Aggregate |
||
SQL Aggregate |
||
SQL Aggregate |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |
||
Tekst |