Kun siirrät Access-tietosi SQL Serveriin tai luot Access-ratkaisun käyttäen SQL Serveriä taustatietokantana, on tärkeää, että tunnet Accessin SQL:n ja SQL Serverin Transact SQL:n (TSQL) väliset erot. Seuraavassa ovat tärkeät erot, jotka on hyvä tuntea ratkaisulle tarkoitetun toiminnan varmistamiseksi.
Lisätietoja on artikkeleissa Accessin SQL: peruskäsitteet, sanasto ja syntaksi ja Transact-SQL-viiteopas.
Syntaksin ja lausekkeiden erot
On olemassa muutamia syntaksi- ja lauseke-eroja, jotka vaativat muuntamista. Seuraavassa taulukossa on lueteltu niistä yleisimmät.
Ero |
Accessin SQL |
SQL Serverin TSQL |
Relaatiotietokantamäärite |
Kutsutaan yleensä kentäksi. |
Kutsutaan yleensä sarakkeeksi |
Merkkijonoliteraalit |
Lainausmerkki ("), esimerkiksi "Mary Q. vastaan" |
Heittomerkki ('), esimerkiksi 'Mary Q. vastaan' |
Päivämääräliteraalit |
Ristikkomerkki (#), esimerkiksi #1/1/2019 # |
Heittomerkki ('), esimerkiksi '1/1/2019' |
Useiden merkkien yleismerkki |
Tähti (*), esimerkiksi "Cath*" |
Prosentti (%), esimerkiksi 'Cath%' |
Yksittäisen merkin yleismerkki |
Kysymysmerkki (?), esimerkiksi "Cath?" |
Alaviiva (_), esimerkiksi "Cath_" |
Jakojäännösoperaattori |
JAKOJ-operaattori, esimerkiksi Arvo1 JAKOJ Arvo2 |
Prosentti (%), esimerkiksi Arvo1 % Arvo2 |
Totuusarvot |
JOSSA bittiarvo = [Tosi | Epätosi] Tai JOSSA bittiarvo = [-1 | 0] |
JOSSA bittiarvo = [1 | 0] |
Parametrit |
[<Nimi, joka ei ole määritetty sarake>] Tai Käytä SQL-näkymässä SQL-parametrien määritystä |
@ParamName |
Huomautuksia
-
Accessissa taulukoiden nimet ja objektit kirjoitetaan lainausmerkkeihin ("). T-SQL:ssä niitä voi käyttää välilyöntejä sisältävissä taulukoiden nimissä, mutta se ei ole tavallinen nimeämiskäytäntö. Useimmiten objektit pitäisi nimetä uudelleen ilman välilyöntejä, mutta myös kyselyt on kirjoitettava uudelleen uusia taulukoiden nimiä vastaaviksi. Käytä hakasulkeita [ ] taulukoissa, joita ei voi nimetä uudelleen, mutta jotka eivät ole nimeämisstandardien mukaisia. Access lisää myös ylimääräiset sulkeet kyselyissä oleviin muuttujiin, mutta ne voidaan poistaa T-SQL:ssa.
-
Harkitse kanonisen päivämäärämuodon, vvvv-kk-pp hh:mm:ss, käyttämistä. Se on merkkeinä tallennettavien päivämäärien ODBC-standardi ja tarjoaa yhdenmukaisen tavan päivämäärien ilmaisemiseen eri tietokannoissa sekä säilyttää päivämäärien lajittelujärjestyksen.
-
Jos haluat välttää sekaannukset totuusarvojen vertailussa, voit käyttää seuraavaa Accessin ja SQL Serverin vertailua:
-
Testaa, onko arvo epätosi JOSSA bittiarvo = 0
-
Testaa, onko arvo tosi JOSSA bittiarvo <> 0
-
Tyhjät arvot
Tyhjä arvo ei ole tyhjä kenttä, mikä tarkoittaisi, ettei arvoa olisi lainkaan. Tyhjä arvo on paikkamerkki, mikä tarkoittaa, että tiedot puuttuvat tai ovat tuntemattomia. Tietokantajärjestelmät, jotka tunnistavat tyhjät arvot, käyttävät kolmiarvoista logiikkaa. Tämä tarkoittaa sitä, että jokin voi olla tosi, epätosi tai tuntematon. Jos tyhjiä arvoja ei käsitellä oikein, yhtäläisyysvertailuja tehtäessä tai WHERE-lausekkeita arvioitaessa voidaan saada vääriä tuloksia. Tässä on vertailu siitä, kuinka Access ja SQL Server käsittelevät tyhjiä arvoja.
Tyhjien arvojen poistaminen käytöstä taulukossa
Accessissa ja SQL Serverissä tyhjät arvot ovat oletusarvoisesti käytössä. Voit poistaa tyhjät arvot käytöstä taulukon sarakkeessa seuraavasti:
-
Määritä Accessissa kentän Pakollinen-ominaisuuden Kyllä.
-
Lisää SQL Serverissä NOT NULL -määrite sarakkeeseen CREATE TABLE -lauseen avulla.
Tyhjien arvojen testaaminen WHERE-lauseessa
Käytä IS NULL- ja IS NOT NULL -vertailupredikaatteja:
-
Käytä Accessissa predikaattia IS NULL tai IS NOT NULL. Esimerkki:
SELECT … WHERE column IS NULL.
-
Käytä SQL Serverissä predikaattia IS NULL tai IS NOT NULL. Esimerkki:
SELECT … WHERE field IS NULL
Tyhjien arvojen muuntaminen funktioilla
Voit suojata lausekkeet ja palauttaa vaihtoehtoiset arvot tyhjillä funktioilla:
-
Käytä Accessissa NZ (arvo, [valueifnull]) -funktiota, joka palauttaa arvon 0 tai muun arvon. Esimerkki:
SELECT AVG (NZ (Weight, 50) ) FROM Product
-
Käytä SQL Serverissä ISNULL(arvo, replacement_value) -funktiota, joka palauttaa arvon 0 tai muun arvon. Esimerkki:
SELECT AVG (ISNULL (Weight, 50)) FROM Product
Tietoja tietokanta-asetuksista
Joissakin tietokantajärjestelmissä on omat mekanisminsa:
-
Accessissa ei ole tyhjiin arvoihin liittyviä tietokanta-asetuksia.
-
SQL Serverissä voidaan käyttää SET ANSI_NULLS OFF -asetusta suoriin tyhjien arvojen yhtäläisyysvertailuihin operaattorien = ja <> avulla. On suositeltavaa välttää tämän asetuksen käyttöä, koska se on vanhentunut ja voi aiheuttaa sekaannusta niille henkilöille, jotka käyttävät ISO-yhteensopivaa tyhjien arvojen käsittelyä.
Muuntaminen ja määrittäminen
Aina, kun käsittelet tietoja tai ohjelmoit, tietoja on jatkuvasti tarve muuntaa tietotyypistä toiseen. Muunnosprosessi voi olla yksinkertainen tai monimutkainen. Yleisiä ongelmia, joita sinun on ajateltava: implisiittinen tai eksplisiittinen muunto, nykyisen päivämäärän ja kellonajan aluekohtaiset asetukset, lukujen pyöristäminen tai katkaisu sekä tietotyyppien koot. Tulosten perusteelliselle testaukselle ja vahvistamiselle ei ole vaihtoehtoa.
Accessissa käytetään tyyppimuuntofunktioita, joita on yksitoista. Niistä jokainen alkaa kirjaimella C, ja niitä on yksi jokaista tietotyyppiä varten. Jos esimerkiksi haluat muuntaa liukuluvun merkkijonoksi, toimi seuraavasti:
CStr(437.324) returns the string "437.324".
SQL Serverissä käytetään yleensä TSQL-funktioitaCAST ja CONVERT, vaikka olemassa on muitakin muuntofunktioita erikoistarpeita varten. Jos esimerkiksi haluat muuntaa liukuluvun merkkijonoksi, toimi seuraavasti:
CONVERT(TEXT, 437.324) returns the string "437.324"
DateAdd-, DateDiff-ja DatePart-funktiot
Nämä usein käytettävät päivämääräfunktiot ovat samanlaisia (DateAdd, DateDiff ja DatePart) Accessissa ja TSQL:ssa, mutta ensimmäisen argumentin käytössä on eroa.
-
Accessissa ensimmäisen argumentin nimi on väli, ja se on lainausmerkkejä vaativa merkkijonolauseke.
-
SQL Serverissä ensimmäisen argumentin nimi on datepart, ja siinä käytetään avainsana-arvoja, jotka eivät vaadi lainausmerkkejä.
Osa
Access
SQL Server
Vuosi
"yyyy"
year, yy, yyyy
Neljännes
"q"
quarter, qq, q
Kuukausi
"m"
month, mm, m
Vuoden päivä
"v"
dayofyear, dy, y
Päivä
"d"
day, dd, d
Viikko
"ww"
wk, ww
Viikonpäivä
"w"
weekday, dw
Tunti
"h"
hour, hh
Minuutti
"n"
minute, mi, n
Sekunti
"s"
second, ss, s
Millisekunti
millisecond, ms
Funktioiden vertailu
Access-kyselyissä voi olla laskettuja sarakkeita, joissa käytetään joskus Access-funktioita tulosten saamiseen. Kun siirrät kyselyjä SQL Serveriin, sinun on korvattava Access-funktio vastaavalla TSQL-funktiolla, jos se on käytettävissä. Jos vastaavaa TSQL-funktiota ei ole, voit yleensä luoda lasketun sarakkeen (lasketulle sarakkeelle käytetty TSQL-termi) haluamasi toimenpiteen suorittamiseen. TSQL:ssä on laaja valikoima funktioita, joihin kannattaa tutustua. Lisätietoja on artikkelissa SQL-tietokantafunktiot.
Seuraavasta taulukosta näet, millä Access-funktiolla on vastaava TSQL-funktio.
Access-luokka |
Access-funktio |
TSQL-funktio |
Muunnos |
||
Muunnos |
||
Muunnos |
||
Muunnos |
||
Muunnos |
||
Muunnos |
||
Päivämäärä/kellonaika |
||
Päivämäärä/kellonaika |
||
Päivämäärä/kellonaika |
||
Päivämäärä/kellonaika |
||
Päivämäärä/kellonaika |
||
Päivämäärä/kellonaika |
||
Päivämäärä/kellonaika |
||
Päivämäärä/kellonaika |
||
Päivämäärä/kellonaika |
||
Päivämäärä/kellonaika |
||
Päivämäärä/kellonaika |
||
Päivämäärä/kellonaika |
||
Päivämäärä/kellonaika |
||
Päivämäärä/kellonaika |
||
Päivämäärä/kellonaika |
||
Ryhmäkoostefunktiot |
||
Matematiikka |
||
Matematiikka |
||
Matematiikka |
||
Matematiikka |
||
Matematiikka |
||
Matematiikka |
||
Matematiikka |
||
Matematiikka |
||
Matematiikka |
||
Matematiikka |
||
Matematiikka |
||
Ohjelman kulku |
||
Ohjelman kulku |
||
Tilastofunktiot |
||
SQL-koostefunktiot |
||
SQL-koostefunktiot |
||
SQL-koostefunktiot |
||
SQL-koostefunktiot |
||
SQL-koostefunktiot |
||
Teksti |
||
Teksti |
||
Teksti |
||
Teksti |
||
Teksti |
||
Teksti |
||
Teksti |
||
Teksti |
||
Teksti |