Ha az Access-adatokat SQL Server migrálja, vagy olyan Access-megoldást hoz létre, amely háttéradatbázisként SQL Server, elengedhetetlen, hogy tisztában legyen az Access SQL és a SQL Server Transact SQL (TSQL) közötti különbségekkel. A következőkben felsoroljuk a legfontosabb változatokat, melyek ismerete fontos ahhoz, hogy megoldása a tervezett módon működjön.
További információt az Access SQL: alapfogalmak, szókészlet és szintaxis és a Transact-SQL referenciák című cikkben talál.
Szintaktikai és kifejezésbeli különbségek
Van néhány szintaktikai és kifejezésbeli különbség, ami átváltást igényel. Az alábbi táblázat összefoglalja a leggyakoribbakat.
|
Különbség |
Access SQL: |
SQL Server TSQL |
|
Relációs adatbázis attribútum |
A neve rendszerint mező |
A neve rendszerint oszlop |
|
Karakterlánc-konstans |
Idézet („“), például „Mary Q. Contrary“ |
Aposztróf (‚‘), például ‚Mary Q. Contrary‘ |
|
Dátumkonstans |
Kettős kereszt (#), például #2019/1/1# |
Aposztróf (‚‘) például ‚2019/1/1‘ |
|
Többszörös helyettesítő karakter |
Csillag (*), például a „Cath*“ |
Százalék (%), például a „Cath%“ |
|
Egyszeres helyettesítő karakter |
Kérdőjel (?), például a „Cath?“ |
Aláhúzás (_), például a „Cath_“ |
|
Modulo operátor |
MOD operátor, például érték1 MOD érték2 |
Százalék (%), például érték1 % érték2 |
|
Logikai érték |
WHERE bájtérték = [Igaz | Hamis] Vagy WHERE bájtérték = [-1 | 0] |
WHERE bájtérték = [1 | 0] |
|
Paraméterek |
[<Olyan név, ami nem meghatározott oszlop>] Vagy SQL-nézetben használja az SQL-paraméterek deklarációt |
@ParamName |
Megjegyzések
-
Az Access idézőjelbe („“) teszi a táblázatok neveit és objektumait. A T-SQL felhasználhatja őket szóközökkel ellátott táblázatokhoz, de ez nem szokásos elnevezési gyakorlat. Az objektumokat a legtöbb esetben szóközök nélkül kell átnevezni, de a lekérdezéseket is át kell írni az új tábla neveinek megfelelően. Használhat szögletes zárójelet [] azoknál a táblázatoknál, amelyek nem nevezhetők át, és nem felelnek meg a névadási szabványoknak. Az Access ezenkívül további zárójeleket is ad a lekérdezésekhez, de a T-SQL-ben eltávolíthatja őket.
-
Fontolja meg a kanonikus dátum formátum, az éééé-hh-nn óó: NN: SS használatát, amely egy ODBC-szabvány a szövegként tárolt dátumokra, ami által egységes módon jelenítheti meg őket az adatbázisokban, és megőrizheti a dátum szerinti rendezési sorrendet.
-
A logikai értékek összehasonlításakor a következő összehasonlítást használhatja az Accesshez és az SQL Serverhez:
-
Hamis érték tesztelése WHERE bájtérték = 0
-
Igaz érték tesztelése WHERE bájtérték <> 0
-
Null értékek
A null érték nem üres mező, amely azt jelenti, hogy "egyáltalán nincs érték". A null érték egy helyőrző, ami azt jelenti, hogy az adat hiányzik vagy ismeretlen. A null értékeket felismerő adatbázisrendszerek "háromértékű logikát" implementálnak, ami azt jelenti, hogy valami igaz, hamis vagy ismeretlen lehet. Ha nem megfelelően kezeli a null értékeket, helytelen eredményeket kaphat egyenlőségi összehasonlítások vagy WHERE záradékok kiértékelésekor. Az alábbi összehasonlítás bemutatja, hogy kezeli a null értékeket az Access és az SQL Server.
Null értékek letiltása egy táblázatban
Mind az Access, mind az SQL Server alapbeállítása, hogy a null értékek engedélyezve vannak. A null értékek letiltásához egy táblázat oszlopában tegye a következőket:
-
Az Accessben állítsa egy mező Kötelező tulajdonságát Igen értékre.
-
Az SQL Serverben adja a NOT NULL attribútumot az oszlopához a CREATE TABLE utasításban.
Null értékek tesztelése egy WHERE záradékban
Használja az IS NULL és az IS NOT NULL összehasonlítási predikátumokat:
-
Az Accessben használja az IS NULL és az IS NOT NULL predikátumokat. Például:
SELECT … WHERE column IS NULL.
-
SQL Serverben használja az IS NULL és az IS NOT NULL predikátumokat. Például:
SELECT … WHERE field IS NULL
Konvertálja a null értékeket függvényekkel
Használja a null függvényeket a saját kifejezések védelméhez és másodlagos értékek visszaadásához:
-
Az Accessben használja az NZ (value, [valueifnull]) függvényt, amely 0 vagy más értéket ad vissza. Például:
SELECT AVG (NZ (Weight, 50) ) FROM Product
-
SQL Serverben használja az ISNULL(Value, replacement_value) függvényt, amely 0 vagy más értéket ad vissza. Például:
SELECT AVG (ISNULL (Weight, 50)) FROM Product
Az adatbázis-beállítások megértése
Egyes adatbázis-rendszerek saját mechanizmusokkal rendelkeznek:
-
Az Accessben nincsenek a null értékre vonatkozó adatbázis-beállítások.
-
SQL Serverben használhatja a SET ANSI_NULLS OFF opciót közvetlen egyenlőségi összehasonlításhoz azokkal null értékkel, amelyek a = and <> operátorokat használják. Azt javasoljuk, hogy ne használja ezt a beállítást, mert elavult, és így összezavarhatja azokat, akik az ISO-kompatibilis null-kezelést használják.
Konvertálás és casting
Amikor csak adatokkal vagy kódolással dolgozik, az adatok más formátumba helyezése állandóan szükséges. Az konvertálás folyamata lehet egyszerű és összetett. A következőkkel kapcsolatos problémák gyakoriak: implicit vagy explicit konvertálás, a dátum-és időpontok regionális beállításai, a számok kerekítése vagy csonkítása és adattípus mérete. Nem helyettesíti az alapos tesztelést és az eredmények megerősítését.
Az Accessben a Típuskonverziós függvényeketkell használnia, amelyből 11 van, egy minden adattípushoz, és amelyek mindegyike C betűvel kezdődik. Például egy lebegőpontos számot karakterláncba konvertálni:
CStr(437.324) returns the string "437.324".
Az SQL Serverben elsősorban a CAST és CONVERT TSQL-függvényeket használja, bár vannak más Konverziós függvények is a speciális igényekhez. Például egy lebegőpontos számot karakterláncba konvertálni:
CONVERT(TEXT, 437.324) returns the string "437.324"
DateAdd, DateDiff és DatePart függvények
Ezek a gyakori függvények hasonlók (DateAdd, DateDiff és DatePart) az Accessben és TSQL-ben, de az első argumentum használata eltérő.
-
Az Accessben az első argumentum neve intervallum, és egy sztringkifejezés, amely idézőjeleket igényel.
-
A SQL Server az első argumentum neve datepart, és olyan kulcsszóértékeket használ, amelyekhez nincs szükség idézőjelekre.
Összetevő
Access
SQL Server
Év
„éééé“
év, éé, éééé
Negyedév
„n.év“
negyedév, n.év, n.
Hónap
„h“
hónap, hh, h
Év napja
„y“
évnapja
Nap
„n“
nap, nn, n
Hét
„hét“
wk, ww
A hét napja
„w“
hétköznap, hn
Óra
"ó"
óra, óó
Perc
"p"
perc, pp, p
Másodperc
"mp"
másodperc, mp, s
Ezredmásodperc
ezredmásodperc, ms
Függvények összehasonlítása
Az Access-lekérdezések olyan számított oszlopokat is tartalmazhatnak, amelyek időnként Access függvényeket használnak. Adatbázis SQL Serverre történő áthelyezése során le kell cserélnie az Access függvényt egy egyenértékű TSQL-függvényre. Ha nincs megfelelő TSQL-függvény, rendszerint létrehozhat egy számított oszlopot (a számított oszlophoz használt TSQL kifejezést) a kívánt feladathoz. A TSQL függvények széles választékával rendelkezik, és az Ön előnyére szolgál az elérhető funkciók megtekintése. További információért keresse fel a Az SQL adatbázis-függvények című tartalmat.
Az alábbi táblában láthatja, mely Access függvényhez tartozik megfelelő TSQL-függvény.
|
Access kategória |
Access függvény |
TSQL-függvény |
|
Konvertálás |
||
|
Konvertálás |
||
|
Konvertálás |
||
|
Konvertálás |
||
|
Konvertálás |
||
|
Konvertálás |
||
|
Dátum/Idő |
||
|
Dátum/Idő |
||
|
Dátum/Idő |
||
|
Dátum/Idő |
||
|
Dátum/Idő |
||
|
Dátum/Idő |
||
|
Dátum/Idő |
||
|
Dátum/Idő |
||
|
Dátum/Idő |
||
|
Dátum/Idő |
||
|
Dátum/Idő |
||
|
Dátum/Idő |
||
|
Dátum/Idő |
||
|
Dátum/Idő |
||
|
Dátum/Idő |
||
|
Tartományösszegzés |
||
|
Matematika |
||
|
Matematika |
||
|
Matematika |
||
|
Matematika |
||
|
Matematika |
||
|
Matematika |
||
|
Matematika |
||
|
Matematika |
||
|
Matematika |
||
|
Matematika |
||
|
Matematika |
||
|
Programmenet |
||
|
Programmenet |
||
|
Statisztikai |
||
|
SQL-összesítés |
||
|
SQL-összesítés |
||
|
SQL-összesítés |
||
|
SQL-összesítés |
||
|
SQL-összesítés |
||
|
Szöveg |
||
|
Szöveg |
||
|
Szöveg |
||
|
Szöveg |
||
|
Szöveg |
||
|
Szöveg |
||
|
Szöveg |
||
|
Szöveg |
||
|
Szöveg |