Access SQL-palvelimen vertaaminen SQL Server TSQL-palvelimeen

Käytetään kohteeseen
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Jos siirrät Access-tiedot SQL Server tai luot Access-ratkaisun, jonka taustatietokantana on SQL Server, on tärkeää, että tiedät Access SQL:n ja SQL Server Transact SQL:n (TSQL) väliset erot. Seuraavassa ovat tärkeät erot, jotka on hyvä tuntea ratkaisulle tarkoitetun toiminnan varmistamiseksi.

Lisätietoja on artikkelissa Access SQL: peruskäsitteet, sanasto ja syntaksi sekä Transact-SQL Reference.

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:

    • Epätosiarvon testaaminen WHERE Bitvalue = 0
    • Todellisen arvon testaaminen WHERE Bitvalue <> 0

Tyhjät arvot

Tyhjäarvo ei ole tyhjä kenttä, joka tarkoittaa "ei arvoa ollenkaan". Tyhjä arvo on paikkamerkki, mikä tarkoittaa, että tiedot puuttuvat tai ovat tuntemattomia. Tyhjäarvoja tunnistavat tietokantajärjestelmät toteuttavat kolmiarvoisen logiikan, mikä tarkoittaa, että jokin voi olla tosi, epätosi tai tuntematon. Jos et käsittele tyhjiä arvoja oikein, voit saada virheellisiä tuloksia, kun teet tasa-arvovertailuja tai arvioit WHERE-lauseita. 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 Server voit käyttää SET ANSI_NULLS OFF -vaihtoehtoa suorissa tasa-arvovertailuissa NULL-arvon kanssa käyttämällä =- ja <> operaattorit-näiltä. 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 perusteellista testausta ja vahvistamista ei voi korvata.

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 Server käytetään ensisijaisesti CAST- ja CONVERT TSQL -funktioita, vaikka on olemassa muita muuntofunktioita erityistarpeisiin. 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äistä argumenttia kutsutaan aikaväliksi, ja se on merkkijonolauseke, joka edellyttää lainausmerkkejä.

  • SQL Server ensimmäinen argumentti on nimeltään päivämääräosa, ja se käyttää avainsanaarvoja, jotka eivät vaadi lainausmerkkejä.

    Komponentti 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 (lasketun sarakkeen TSQL-termi) tekemään mitä haluat. TSQL:ssä on laaja valikoima funktioita, ja sinun on hyvä nähdä, mitä on saatavilla. Lisätietoja on artikkelissa Mitä SQL-tietokantafunktiot ovat?.

Seuraavasta taulukosta näet, millä Access-funktiolla on vastaava TSQL-funktio.

Access-luokka Access-funktio TSQL-funktio
Muunnos Chr-funktio CHAR
Muunnos Day-funktio PÄIVÄ
Muunnos FormatNumber-funktio MUODOSSA
Muunnos FormatPercent-funktio MUODOSSA
Muunnos Str-funktio STR
Muunnos Tyyppimuuntofunktiot CAST ja CONVERT
Päivämäärä/kellonaika Date-funktio NYKYINEN_AIKALEIMA
Päivämäärä/kellonaika Day-funktio DATEFROMPARTS
Päivämäärä/kellonaika DateAdd-funktio DATEADD
Päivämäärä/kellonaika DateDiff-funktio DATEDIFF
DATEDIFF_BIG
Päivämäärä/kellonaika DatePart-funktio DATEPART
Päivämäärä/kellonaika DateSerial-funktio DATEFROMPARTS
Päivämäärä/kellonaika DateValue-funktio DATENAME
Päivämäärä/kellonaika Hour-funktio TIMEFROMPARTS
Päivämäärä/kellonaika Minute-funktio TIMEFROMPARTS
Päivämäärä/kellonaika Month-funktio KUUKAUSI
Päivämäärä/kellonaika Now-funktio SYSDATETIME
Päivämäärä/kellonaika Second-funktio TIMEFROMPARTS
Time-funktio TIMEFROMPARTS
Päivämäärä/kellonaika TimeSerial-funktio TIMEFROMPARTS
Päivämäärä/kellonaika Weekday-funktio DATEPART
DATENAME
Päivämäärä/kellonaika Year-funktio VUOSI
DATEFROMPARTS
Ryhmäkoostefunktiot DFirst- ja DLast-funktiot FIRST_VALUE
LAST_VALUE
Matematiikka Abs-funktio ITSEISARVO
Matematiikka Atn-funktio ATAN
ATN2
Matematiikka Cos-funktio COS
ACOS
Matematiikka Exp-funktio EKSPONENTTI
Matematiikka Int- ja Fix-funktiot PYÖRISTÄ.KERR.ALAS
Matematiikka Log-funktio LOG
LOG10
Matematiikka Rnd-funktio SATUNNAISLUKU
Matematiikka Round-funktio KIERROS
Matematiikka Sgn-funktio ETUMERKKI
Matematiikka Sin-funktio SIN
Matematiikka Sqr-funktio NELIÖJUURI
Ohjelman kulku Choose-funktio VALITSE.INDEKSI
Ohjelman kulku IIf-funktio IIF
Tilastofunktiot Avg-funktio AVG
SQL-koostefunktiot Count-funktio LASKE
COUNT_BIG
SQL-koostefunktiot Min- ja Max-funktiot MIN
MAKS
SQL-koostefunktiot StDev- ja StDevP-funktiot KESKIHAJONTA
KESKIHAJONTAP
SQL-koostefunktiot Sum-funktio SUMMA
SQL-koostefunktiot Var- ja VarP-funktiot VAR
VARP
Teksti Format-funktio MUODOSSA
Teksti LCase-funktio PIENET
Teksti Left-funktio VASEN
Teksti Len-funktio LEN
Teksti LTrim-, RTrim- ja Trim-funktiot POISTA.VÄLIT
LTRIM
RTRIM
Teksti Replace-funktio KORVATA
Teksti Right-funktio OIKEA
Teksti StrReverse-funktio KÄÄNTEINEN
Teksti UCase-funktio ISOT