Access SQL -palvelimen vertaaminen SQL Server TSQL-palvelimeen
Applies ToAccess for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

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

Chr-funktio

CHAR

Muunnos

Day-funktio

DAY

Muunnos

FormatNumber-funktio

FORMAT

Muunnos

FormatPercent-funktio

FORMAT

Muunnos

Str-funktio

STR

Muunnos

Tyyppimuuntofunktiot

CAST ja CONVERT

Päivämäärä/kellonaika

Date-funktio

CURRENT_TIMESTAMP

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

MONTH

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

YEAR

DATEFROMPARTS

Ryhmäkoostefunktiot

DFirst- ja DLast-funktiot

FIRST_VALUE

LAST_VALUE

Matematiikka

Abs-funktio

ABS

Matematiikka

Atn-funktio

ATAN

ATN2

Matematiikka

Cos-funktio

COS

ACOS

Matematiikka

Exp-funktio

EXP

Matematiikka

Int- ja Fix-funktiot

FLOOR

Matematiikka

Log-funktio

LOG

LOG10

Matematiikka

Rnd-funktio

RAND

Matematiikka

Round-funktio

ROUND

Matematiikka

Sgn-funktio

SIGN

Matematiikka

Sin-funktio

SIN

Matematiikka

Sqr-funktio

SQRT

Ohjelman kulku

Choose-funktio

CHOOSE

Ohjelman kulku

IIf-funktio

IIF

Tilastofunktiot

Avg-funktio

AVG

SQL-koostefunktiot

Count-funktio

COUNT

COUNT_BIG

SQL-koostefunktiot

Min- ja Max-funktiot

MIN

MAX

SQL-koostefunktiot

StDev- ja StDevP-funktiot

STDEV

STDEVP

SQL-koostefunktiot

Sum-funktio

SUM

SQL-koostefunktiot

Var- ja VarP-funktiot

VAR

VARP

Teksti

Format-funktio

FORMAT

Teksti

LCase-funktio

LOWER

Teksti

Left-funktio

LEFT

Teksti

Len-funktio

LEN

Teksti

LTrim-, RTrim- ja Trim-funktiot

TRIM

LTRIM

RTRIM

Teksti

Replace-funktio

REPLACE

Teksti

Right-funktio

RIGHT

Teksti

StrReverse-funktio

REVERSE

Teksti

UCase-funktio

UPPER

Tarvitsetko lisäohjeita?

Haluatko lisää vaihtoehtoja?

Tutustu tilausetuihin, selaa harjoituskursseja, opi suojaamaan laitteesi ja paljon muuta.

Osallistumalla yhteisöihin voit kysyä kysymyksiä ja vastata niihin, antaa palautetta sekä kuulla lisää asiantuntijoilta, joilla on runsaasti tietoa.