sql serveri süntaks. MS SQL Serveri ja T-SQL tutvustus. Mitme lausega UDF-i kasutamine

Siin täielik nimekiri funktsioonid stringidega töötamiseks, võetud BOL-ist:

ASCII NCHAR HELI
CHAR PATINDEX RUUM
CHARINDEX ASENDA STR
ERINEVUS QUOTENAME KRAAM
VASAKULE KORDA SUBSTRING
LEN TAGURPIDI UNICODE
ALUMINE ÕIGE ÜLEMINE
LTRIM RTRIM

Alustame kahest vastastikku pöördfunktsioonid - ASCII Ja CHAR.

Funktsioon ASCII tagastab funktsiooni argumendiks oleva stringi avaldise vasakpoolseima märgi ASCII-koodi.

Siin on näiteks, kuidas saate määrata, kui palju teil on erinevad tähed, millega Laevade tabelis algavad laevade nimed:


Tuleb märkida, et sarnase tulemuse saab hõlpsamini mõne muu funktsiooni abil - VASAKULE, millel on järgmine süntaks:

VASAKULE (<string väljend>, <täisarvu avaldis>)

ja lõikab esimeseks argumendiks olevast stringist teise argumendiga määratud märkide arvu vasakult. Niisiis,

VALI ERILINE VASAK (nimi, 1) Tarnetest TELLI 1

Näiteks saate kõigi tähemärkide koodide tabeli hankida järgmiselt.

SELECT CHAR(ASCII("a")+ number-1) täht, ASCII("a")+ number - 1
FROM (VALI 5*5*(a-1)+5*(b-1) + c AS nr
FROM (VALI 1 a LIIT KÕIK VALI 2 LIIDU KÕIK VALI 3 LIIDU KÕIK VALI 4 LIIT KÕIK VALI 5) x
RISTLIITUMINE
(VALI 1 b ÜHEND KÕIK VALI 2 LIIT KÕIK VALI 3 LIIDU KÕIK VALI 4 LIIT KÕIK VALI 5) y
RISTLIITUMINE
(VALI 1 c LIIT KÕIK VALI 2 LIIDU KÕIK VALI 3 LIIDU KÕIK VALI 4 LIIT KÕIK VALI 5) z
)x
KUS ASCII("a")+ number -1 ASCII("a") JA ASCII("z") VAHEL

Neile, kes pole veel numbrijada genereerimisest teadlikud, viitan vastavale artiklile.

Nagu teada, koodid väiketähtedega ja suured tähed on erinevad. Seetõttu saada täiskomplekt Ilma taotlust ümber kirjutamata peate lihtsalt ülaltoodud koodile lisama sarnase:


Arvan, et seda kirja vajadusel tabelisse lisada poleks kuigi keeruline.

Vaatleme nüüd ülesannet määrata, kust stringi avaldises soovitud alamstring leida. Selleks saab kasutada kahte funktsiooni - CHARINDEX Ja PATINDEX. Mõlemad tagastavad stringi alamstringi alguspositsiooni (alamstringi esimese märgi positsiooni). Funktsioonil CHARINDEX on süntaks:

CHARINDEX( otsingu_avaldis, string_avaldis[, algus_positsioon])

Siin on valikuline täisarvuline parameeter algus_positsioon määrab positsiooni stringi avaldises, millest otsimine toimub otsingu_avaldis. Kui see parameeter välja jätta, tehakse otsing algusest peale string_avaldis. Näiteks taotleda

Tuleb märkida, et kui otsitav alamstring või stringi avaldis on NULL, siis on ka funktsiooni tulemus NULL.

Järgmine näide määrab tähe "a" esimese ja teise esinemise asukoha laevanimes "California"

SELECT CHARINDEX("a",nimi) esimene_a,
CHARINDEX("a", nimi, CHARINDEX("a", nimi)+1) teine_a
FROM laevad WHERE name = "California"

Pane tähele, et funktsioonis teise märgi defineerimisel kasutatakse alguspositsiooni, milleks on esimesele tähele "a" järgneva märgi asukoht - CHARINDEX("a", nimi)+1. Tulemuse - 2 ja 10 - õigsust on lihtne kontrollida :-).

Funktsioonil PATINDEX on süntaks:

PATINDEX("% näidis%" , string_avaldis)

Peamine erinevus selle funktsiooni ja CHARINDEXi vahel on see otsingustring võib sisaldada metamärgid- % ja _. Sel juhul on kohustuslikud lõpumärgid "%". Näiteks selle funktsiooni kasutamine esimeses näites näeks välja selline


Selle päringu tulemus näeb välja selline:


Asjaolu, et saame tulemuseks tühja tulemuse, tähendab, et andmebaasis pole selliseid laevu. Võtame väärtuste kombinatsiooni - laeva klass ja nimi.

Kahe stringiväärtuse ühendamist üheks nimetatakse konkatenatsioon, ja sisse SQL Server selle toimingu jaoks kasutatakse "+" märki (standardis "||"). Niisiis,

Mis siis, kui stringi avaldis sisaldab ainult ühte tähte? Päring toob selle esile. Saate seda hõlpsalt kontrollida kirjutades

Andmete hankimiseks andmebaasist kasutatakse SQL keelt. SQL on programmeerimiskeel, mis sarnaneb väga inglise keelega, kuid on mõeldud andmebaasihaldusprogrammide jaoks. SQL-i kasutatakse kõigis Accessi päringutes.

Põhimõtete mõistmine SQL töö aitab luua rohkem täpsed päringud ja muudab valesid tulemusi tagastavate päringute parandamise lihtsamaks.

See on artikkel Accessi SQL-keelt käsitlevate artiklite seeriast. See kirjeldab SQL-i kasutamise põhitõdesid andmete toomiseks ja pakub SQL-i süntaksi näiteid.

Selles artiklis

Mis on SQL?

SQL on programmeerimiskeel, mis on loodud töötama faktide kogumite ja nendevaheliste suhetega. Juhtprogrammides relatsioonilised andmebaasid andmed nagu Microsoft Office Access, andmetega töötamiseks kasutatakse SQL-keelt. Erinevalt paljudest programmeerimiskeeltest on SQL loetav ja arusaadav ka algajatele. Nagu paljud programmeerimiskeeled, on ka SQL rahvusvaheline standard, mida tunnustavad standardimiskomiteed nagu ISO ja ANSI.

Andmekogumeid kirjeldatakse SQL-is, et aidata küsimustele vastata. Kell kasutades SQL-i tuleb kasutada õiget süntaksit. Süntaks on reeglite kogum, mis võimaldab keele elemente õigesti kombineerida. SQL-i süntaks süntaksi põhjal inglise keeles ja sellel on palju süntaksiga ühiseid elemente Visuaalne keel Basic for Applications (VBA).

Näiteks lihtne SQL-lause, mis hangib Maarja-nimeliste kontaktide perekonnanimede loendi, võib välja näha selline:

SELECT Perekonnanimi
FROM Kontaktid
WHERE Eesnimi = "Maarja";

Märge: SQL-keelt ei kasutata mitte ainult andmetega toimingute tegemiseks, vaid ka andmebaasiobjektide, näiteks tabelite, struktuuri loomiseks ja muutmiseks. SQL-i seda osa, mida kasutatakse andmebaasiobjektide loomiseks ja muutmiseks, nimetatakse DDL-iks. DDL-i see artikkel ei käsitle. Lisainformatsioon Vaadake teemat Tabelite või indeksite loomine või muutmine andmedefinitsiooni päringu abil.

VALI avaldused

SELECT-lauset kasutatakse andmekogumi kirjeldamiseks SQL-is. See sisaldab Täielik kirjeldus andmete kogum, mis tuleb andmebaasist alla laadida, sealhulgas järgmised:

    andmeid sisaldavad tabelid;

    ühendused andmete vahel erinevatest allikatest;

    väljad või arvutused, mille alusel andmed valitakse;

    valikutingimused, millele peavad vastama päringutulemuses sisalduvad andmed;

    sorteerimise vajadus ja meetod.

SQL-laused

SQL-lause koosneb mitmest osast, mida nimetatakse klausliteks. Igal SQL-lause klauslil on eesmärk. Mõned pakkumised on vajalikud. Allolev tabel näitab SQL-laused kõige sagedamini kasutatav.

SQL-lause

Kirjeldus

Kohustuslik

Määrab väljad, mis sisaldavad nõutavaid andmeid.

Määratleb tabelid, mis sisaldavad SELECT-klauslis määratud välju.

Määrab välja valiku tingimused, millele peavad vastama kõik tulemustes sisalduvad kirjed.

Määrab tulemuste sortimisjärjestuse.

SQL-lauses, mis sisaldab liitmisfunktsioone, tuvastab väljad, mille jaoks SELECT-klauslis ei arvutata kokkuvõtlikku väärtust.

Ainult siis, kui sellised väljad on olemas

Koondamisfunktsioone sisaldav SQL-lause määratleb tingimused, mis kehtivad väljadele, mille jaoks SELECT-klauslis arvutatakse kokkuvõtlik väärtus.

SQL terminid

Iga SQL-lause koosneb terminitest, mida saab võrrelda kõneosadega. Allolev tabel näitab SQL-i terminite tüüpe.

SQL termin

Võrreldav kõneosa

Definitsioon

Näide

identifikaator

nimisõna

Nimi, mida kasutatakse andmebaasiobjekti tuvastamiseks, näiteks välja nimi.

Kliendid.[Telefoninumber]

operaator

tegusõna või määrsõna

Märksõna, mis esindab või muudab toimingut.

konstantne

nimisõna

Väärtus, mis ei muutu, näiteks arv või NULL.

väljendus

omadussõna

Identifikaatorite, operaatorite, konstantide ja funktsioonide kombinatsioon, mis on loodud ühe väärtuse arvutamiseks.

>= Tooted.[Price]

SQL-i põhiklauslid: SELECT, FROM ja WHERE

SQL-lausete üldine vorming on:

VALI väli_1
tabelist_1
KUS kriteerium_1
;

Märkused:

    Access ei arvesta SQL-lausete reavahetustega. Sellest hoolimata on soovitatav iga lauset alustada uus rida et SQL-lauset oleks lihtne lugeda nii selle kirjutajale kui ka kõigile teistele.

    Iga SELECT-lause lõpeb semikooloniga (;). Semikoolon võib esineda kas viimase lause lõpus või eraldi real SQL-lause lõpus.

Näide Accessis

Allolev näide näitab, kuidas võib SQL-lause rakenduses Access välja näha lihtne taotlus proovi kohta.

1. SELECT klausel

2. FROM klausel

3. KUS-klausel

Vaatame näidet lause lause haaval, et mõista, kuidas SQL-i süntaks töötab.

SELECT klausel

SELECT, ettevõte

See on SELECT klausel. See sisaldab (SELECT) avaldust, millele järgneb kaks identifikaatorit ("[Aadress Meil]" ja "Ettevõte").

Kui identifikaator sisaldab tühikuid või erimärgid(näiteks "E-posti aadress"), tuleb see panna ristkülikukujulistesse sulgudesse.

SELECT-klausel ei nõua välju sisaldavate tabelite määramist ja te ei saa määrata valikutingimusi, millele tulemustes sisalduvad andmed peavad vastama.

SELECT-lauses on SELECT-klausel alati enne klauslit FROM.

FROM klausli

FROM Kontaktid

See on klausel FROM. See sisaldab (FROM) avaldust, millele järgneb identifikaator (Kontaktid).

Klausel FROM ei täpsusta valitavaid välju.

KUS klausel

KUS linn = "Seattle"

See on WHERE klausel. See sisaldab lauset (WHERE), millele järgneb väljend (City="Rostov").

Klauslitega SELECT, FROM ja WHERE saate teha palju asju. Nende pakkumiste kasutamise kohta lisateabe saamiseks vaadake järgmisi artikleid:

Sorteerimise tulemused: ORDER BY

Nagu Microsoft Excel, saate Accessis päringu tulemused tabelisse sortida. Kasutades klauslit ORDER BY, saate määrata ka selle, kuidas päringu täitmisel tulemusi sorteeritakse. Kui kasutatakse klauslit ORDER BY, peab see ilmuma SQL-lause lõpus.

Klausel ORDER BY sisaldab sortitavate väljade loendit samas järjekorras, milles sortimist rakendatakse.

Oletame näiteks, et tulemused tuleb esmalt sortida väljale „Ettevõte” kahanevas järjekorras ja seejärel, kui on kirjeid sama väärtus väljad "Ettevõte", - sortige need välja "E-posti aadress" järgi kasvavas järjekorras. Klausel ORDER BY näeks välja järgmine:

TELLIMINE ettevõtte DESC järgi,

Märge: Vaikimisi sorteerib Access väärtused kasvavas järjekorras (A kuni Z, väikseimast suurimani). Selle asemel väärtuste kahanevas järjekorras sortimiseks peate määrama märksõna DESC.

Lisateavet ORDER BY klausli kohta leiate artiklist ORDER BY.

Töö koondandmetega: GROUP BY ja HAVING klauslid

Mõnikord peate töötama kokkuvõtlike andmetega, nagu kuu kogumüük või laos olevad kõige kallimad kaubad. Selleks rakendage SELECT-klauslis väljale koondfunktsioon. Näiteks kui käivitaksite päringu, et saada iga ettevõtte e-posti aadresside arv, võib SELECT klausel välja näha järgmine:

Konkreetse koondfunktsiooni kasutamise võimalus sõltub väljal olevate andmete tüübist ja soovitud väljend. Saadaolevate koondfunktsioonide kohta lisateabe saamiseks vaadake SQL-i statistilised funktsioonid.

Väljade täpsustamine, mida koondfunktsioonis ei kasutata: klausel GROUP BY

Koondfunktsioonide kasutamisel tuleb tavaliselt luua klausel GROUP BY. Klausel GROUP BY määrab kõik väljad, millele koondamisfunktsioon ei kehti. Kui koondfunktsioonid kehtivad päringu kõikidele väljadele, ei pea te GROUP BY-klauslit looma.

Klausel GROUP BY peab kohe järgnema klauslile WHERE või FROM, kui WHERE-klauslit pole. Klauslis GROUP BY loetletakse väljad samas järjekorras nagu klausel SELECT.

Jätkame eelmise näitega. Kui SELECT-klauslis kehtib koondfunktsioon ainult väljale [E-posti aadress], näeb klausel GROUP BY välja järgmine:

GROUP BY Ettevõtte

Lisateavet klausli GROUP BY kohta leiate artiklist GROUP BY.

Koondväärtuste piiramine rühmitustingimuste abil: klausel HAVING

Kui peate tulemuste piiramiseks määrama tingimused, kuid kasutatakse välja, millele soovite neid rakendada koondfunktsioon, ei saa WHERE-klauslit kasutada. Selle asemel tuleks kasutada klauslit HAVING. HAVING-klausel töötab samamoodi nagu WHERE-klausel, kuid seda kasutatakse koondatud andmete jaoks.

Oletame näiteks, et SELECT-klausli esimene väli on AVG funktsioon(mis arvutab keskmise):

SELECT COUNT(), Ettevõte

Kui soovite piirata päringutulemusi funktsiooni COUNT väärtuse alusel, ei saa te sellele väljale WHERE-klauslis valikutingimust rakendada. Selle asemel tuleks tingimus panna klauslisse HAVING. Näiteks kui soovite, et teie päring tagastaks read ainult siis, kui ettevõttel on mitu e-posti aadressi, saate kasutada järgmist HAVING-klauslit:

HAVING COUNT()>1

Märge: Päring võib sisaldada nii WHERE- kui ka HAVING-klauslit koos valikutingimustega väljade jaoks, mida ei kasutata statistilised funktsioonid, on määratud WHERE-klauslis ja statistilistes funktsioonides kasutatavate väljade tingimused on täpsustatud klauslis HAVING.

Lisateavet klausli HAVING kohta leiate artiklist HAVING.

Päringu tulemuste kombineerimine: UNION operaator

Operaatorit UNION kasutatakse kõigi mitme sarnase valikupäringu poolt tagastatud andmete samaaegseks kuvamiseks kombineeritud komplektina.

UNION operaator võimaldab ühendada kaks SELECT-lauset üheks. Ühendatavatel SELECT-lausetel peab olema sama number ja samade või ühilduvate andmetüüpidega väljundväljade järjekord. Päringu käivitamisel kombineeritakse iga sobivate väljade komplekti andmed üheks väljundväljaks, nii et päringu väljundis on sama palju välju kui igal üksikul SELECT-lausel.

Märge: Päringutes liituda numbriliste ja tekstitüübid andmed ühilduvad.

Operaatori UNION abil saate määrata, kas päringutulemustesse tuleks kaasata dubleeritud ridu, kui neid on. Selleks kasutage märksõna KÕIK.

Taotlus kahe ühendamiseks VALI avaldused sellel on järgmine põhisüntaks:

VALI väli_1
tabelist_1
LIIT
VALI väli_a
tabelist_a
;

Oletame näiteks, et teil on kaks tabelit nimega "Tooted" ja "Teenused". Mõlemas tabelis on väljad toote või teenuse nime, hinna- ja garantiiinfoga, samuti välja, mis näitab pakutava toote või teenuse eksklusiivsust. Kuigi tabelid "Tooted" ja "Teenused" pakuvad erinevad tüübid garantiid, on põhiteave sama (kas teatud toodetele või teenustele antakse kvaliteedigarantii). Kahest tabelist nelja välja ühendamiseks saate kasutada järgmist liitumispäringut.

VALI nimi, hind, garantii_saadaval, eksklusiivne_pakkumine
Toodetest
LIIT KÕIK
VALI nimi, hind, garantii_saadaval, eksklusiivne_pakkumine
teenustest
;

Lisateavet SELECT-lausete kombineerimise kohta, kasutades operaatorit UNION, vt

Viimane uuendus: 24.06.2017

SQL Server on üks populaarsemaid populaarsed süsteemid andmebaasihaldus (DBMS) maailmas. See DBMS sobib väga erinevate projektide jaoks: alates väikestest rakendustest kuni suurte, väga koormatud projektideni.

SQL Server on loodud Microsofti poolt. Esimene versioon ilmus 1987. aastal. A praegune versioon on versioon 16, mis tuli välja 2016. aastal ja mida kasutatakse praeguses juhendis.

SQL Server pikka aega oli eranditult Windowsi andmebaasihaldussüsteem, kuid alates versioonist 16 on see süsteem saadaval ka Linuxis.

SQL Serverit iseloomustavad järgmised funktsioonid:

    Esitus. SQL Server on väga kiire.

    Töökindlus ja ohutus. SQL Server pakub andmete krüptimist.

    Lihtsus. Selle DBMS-iga on suhteliselt lihtne töötada ja seda hallata.

MS SQL Serveri, nagu iga DBMS-i, keskne aspekt on andmebaas. Andmebaas on kindlal viisil korraldatud andmete hoidla. Sageli esindab andmebaas füüsiliselt kõvakettal olevat faili, kuigi see kirjavahetus pole vajalik. Andmebaasihaldussüsteeme ehk DBMS-e kasutatakse andmebaaside salvestamiseks ja haldamiseks. Ja just MS SQL Server on üks sellistest DBMS-idest.

Andmebaaside korrastamiseks kasutab MS SQL Server relatsiooniline mudel. Selle andmebaasi mudeli töötas välja 1970. aastal Edgar Codd. Ja täna on see andmebaaside korraldamise standard.

Relatsioonimudel hõlmab andmete salvestamist tabelite kujul, millest igaüks koosneb ridadest ja veergudest. Iga rida salvestab eraldi objekt ja veerud sisaldavad selle objekti atribuute.

Tabeli iga rea ​​tuvastamiseks kasutatakse primaarvõtit. Primaarvõti võib olla üks või mitu veergu. Kasutades primaarvõtit, millele saame viidata konkreetne string laual. Seetõttu ei saa kahel real olla sama primaarvõtit.

Võtmete kaudu saab ühte tabelit teisega siduda, st korraldada seoseid kahe tabeli vahel. Ja tabelit ennast saab kujutada suhtena.

Andmebaasiga suhtlemiseks kasutatakse SQL (Structured Query Language) keelt. Klient (näiteks väline programm) saadab päringu SQL-is spetsiaalse API abil. DBMS tõlgendab ja täidab päringu õigesti ning saadab seejärel täitmistulemuse kliendile.

SQL-i töötas algselt välja IBM andmebaasisüsteemi jaoks nimega System/R. Samal ajal kandis keel ise nime SEQUEL (Structured English Query Language). Kuigi ei andmebaasi ega keelt ennast hiljem ametlikult ei avaldatud, hääldatakse terminit SQL sageli sageli "järgena".

Aastal 1979, Relational Tarkvara Inc. töötas välja esimese andmebaasihaldussüsteemi Oracle, mis kasutas SQL-keelt. Tänu edule sellest tootest ettevõte sai nimeks Oracle.

Seejärel hakkasid ilmuma teised andmebaasisüsteemid, mis kasutasid SQL-i. Selle tulemusena kodifitseeris Ameerika Riiklik Standardiinstituut (ANSI) 1989. aastal keele ja avaldas oma esimese standardi. Pärast seda standardit perioodiliselt ajakohastati ja täiendati. Selle viimane uuendus toimus 2011. aastal. Kuid hoolimata standardi olemasolust kasutavad DBMS-i tootjad sageli oma enda teostused SQL keel, mis on üksteisest veidi erinevad.

SQL-keelt on kahte tüüpi: PL-SQL ja T-SQL. PL-SQL-i kasutatakse sellistes DBMS-ides nagu Oracle ja MySQL. SQL Serveris kasutatakse T-SQL-i (Transact-SQL). Tegelikult see on põhjus, miks T-SQL-i käsitletakse käesolevas juhendis.

Sõltuvalt ülesandest, mida T-SQL-käsk täidab, võib see olla üks järgmistest tüüpidest:

    DDL (Data Definition Language). See tüüp sisaldab erinevaid käske, mis loovad andmebaasi, tabeleid, indekseid, salvestatud protseduure jne. Üldiselt määratakse andmed.

    Eelkõige saame selle tüübi alla liigitada järgmised käsud:

    • CREATE: loob andmebaasiobjekte (andmebaas ise, tabelid, indeksid jne)

      ALTER: muudab andmebaasi objekte

      DROP: eemaldab andmebaasiobjektid

      TRUNCATE: eemaldab tabelitest kõik andmed

    DML (Data Manipulation Language). See tüüp sisaldab käske andmete valimiseks, uuendamiseks, lisamiseks, kustutamiseks – üldiselt kõik need käsud, millega saame andmeid hallata.

    Sellesse tüüpi kuuluvad järgmised käsud:

    • SELECT: hangib andmed andmebaasist

      VÄRSKENDUS: värskendab andmeid

      INSERT: lisab uusi andmeid

      DELETE: kustutab andmed

    DCL (Data Control Language / Data Access Control Language). See tüüp sisaldab käske, mis haldavad andmetele juurdepääsuõigusi. Eelkõige on need järgmised käsud:

    • GRANT: annab loa andmetele juurdepääsuks

      REVOKE: tühistab andmetele juurdepääsuõigused

SQL süntaks

Selles jaotises kirjeldatakse Firebirdi DBMS-i ja MS SQL-i kasutatava SQL-keele süntaksi peamisi erinevusi.

Firebird ja MS SQL DBMS võivad viidata andmebaasiobjektidele (tabelitele, väljadele jne) otse nende nimede kaudu, kui objektide nimed ei sisalda tühikuid või muid märke, mis pole otselingis lubatud (näiteks mitteladina tähed ). Tühikute ja muude märkide kasutamiseks kasutab MS SQL DBMS nurksulge [ ja ] ning Firebirdi DBMS topelt jutumärgid, ". Teine erinevus on võimalus seda kasutada MS DBMS-is SQL skeemid objekti viitamiseks: andmebaasi_objekti_omanik.objekt. Firebirdi DBMS ei luba seda tähistust.

Tähelepanu

MS SQL DBMS kasutab tõstutundlikke objektinimesid, kui installimise ajal otsustasite kasutada tõstutundlikke märke; vastasel juhul ei ole objektinimed tõstutundlikud. Naljakas?

Pole hea...

Vihje

MS SQL DBMS on võimeline töötama identifikaatoritega, mille nimed on jutumärkides, kuid vaikimisi on see funktsioon saadaval ainult siis, kui sellele pääseb juurde OLE DB ja ODBC kaudu, kuid mitte DB-teegi kaudu. Sel põhjusel tuleks seda tööpraktikat vältida.

DBMS MS SQL 7 ja uuemad versioonid toetavad uuendatavaid liitumisi (värskenda, kustuta, lisa). Firebirdi DBMS ei tunne seda süntaksit ära.

Andmetüübid on loomulikult erinevad. Kuigi mõlemal DBMS-il on ühine kõige sagedamini kasutatavate tüüpide alamhulk. See probleem põhjustab harva probleeme andmebaasi migreerimisel.

Kuupäevade stringikonstantide määramiseks on erinevaid vorminguid. Firebird DBMS aktsepteerib stringe erinevaid formaate, olenemata kasutatavast platvormist. MS SQL DBMS omakorda kasutab serverist sõltumatute serveriplatvormi vormingute ja kliendiühenduse seadistusvormingu kombinatsiooni. Lisaks sisaldavad MS SQL DBMS-i juurdepääsumeetodid tavaliselt ühte või kahte taset, mille puhul saab stringikonstandi ühel või teisel viisil kuupäevaks teisendada.

MS SQL DBMS-is saate määratleda suur kogus keskkonnamuutujaid kui Firebirdi DBMS-is, kuid levinumad neist leiab Firebirdi DBMS-ist (tuvastab identifikaatori ja kasutajanime). Ainus oluline muutuja, mis Firebird DBMS-is puudub, on muutuja, mis tagastab viimase toimingu ridade arvu (alates Firebird DBMS-i versioonist 1.5 võeti selline muutuja kasutusele – ca tõlgitud).

Oluline erinevus oli see, et Firebird 1.0 DBMS ei toetanud MS SQL DBMS-i CASE-lauset. Mõnikord oli selle funktsionaalsust võimalik asendada salvestatud protseduuri abil. Alates versioonist 1.5 toetab Firebird DBMS operaatori CASE kasutamist.

Väike erinevus DBMS-i vahel on see, et MS SQL DBMS ei kasuta lausete jaoks eraldajaid, mis võib ülemineku ajal olla raskesti tuvastatavate vigade allikaks, eriti kui kasutada palju sulgusid. Firebirdi DBMS skriptides nõuab iga lause lõpetamist semikooloniga (kui pole määratletud muud eraldajat – umbes tõlge), nii on vigu lihtsam tuvastada.

Nii MS SQL kui ka Firebird toetavad kommentaare /* ja */ eraldajate vahel. MS SQL DBMS toetab ka üherealise kommentaari jaoks kahe sidekriipsu süntaksit. Seda süntaksit toetavad ka mõned Firebirdi DBMS-i utiliidid.

AJAL

WHILE operaator on olemas nii Firebirdis kui ka MS SQL DBMS-is, kuid mõningate erinevustega. Ei eksisteeri BREAK operaatorid või CONTINUE , kuid neid saab emuleerida täiendavate konstruktsioonide abil. Väike erinevus on ka kasutatavas süntaksis: Firebirdi DBMS nõuab silmuse tingimuse järel märksõna DO. Võrrelge järgmisi samaväärseid koodiosi.

/* Firebirdi süntaks. */ Kuni ma< 3) DO BEGIN i = i + 1; j = j * 2; END /* Синтакс MS SQL. */ WHILE (i < 3) BEGIN SET @i = @i + 1 SET @j = @j * 2 END

TAGASI

MS SQL DBMS-i operaator RETURN tagastab täisarvulise muutuja väärtuse ja peatab täitmise. Firebirdi DBMS-is on EXIT-lause, mis annab juhtimise üle salvestatud protseduuri lõppu. Siiski pole peidetud tagastusmuutujat, nii et kui teil on vaja väärtust tagastada (mis on MS SQL-is valikuline), peate selle protseduuris selgelt deklareerima.

OOTAMA

MS SQL DBMS-i operaator WAITFOR peatab täitmise mõneks ajaks või määratud ajani. Midagi sarnast saab teha Firebirdi DBMS-i kasutaja määratud funktsioonide (UDF) abil. Kuid mõlemas DBMS-is tuleks sellise operaatori kasutamine välistada, kuna suhtlus kliendiga on täielikult peatatud (Firebirdi DBMS-is võib see viia kõigi ühenduste, mitte ainult analoogi kutsunud ühenduse teenindamise peatamiseni. määratud operaatorist - umbes tõlge).

Tavalised operaatorid

Tavalised operaatorid mõlemas DBMS-is on saadaval SELECT, INSERT, UPDATE ja DELETE. Firebird ja MS SQL DBMS toetavad neid, kuid MS SQL DBMS-il on nendele operaatoritele mitu mittestandardset laiendust, mida tuleb nende kasutamise korral arutada.

Firebirdi DBMS-is ei luba SELECT-lause kasutada uue tabeli loomiseks käigupealt märksõna INTO. Selle asemel kasutatakse päringu tulemuse sidumiseks muutujaga märksõna INTO.

/* MS SQL-i süntaks muutujale välja väärtuse määramiseks. */ SELECT @my_state = olek FROM autoritest WHERE auth_name = "John" /* Firebirdi süntaks. */ SELECT olek INTO:state /* --> märkige ":" enne muutuja nime */ FROM autoritest WHERE auth_name = "John"

DBMS-is MS SQL 7 ja uuemad versioonid SELECT avaldus saate määrata TOP-spetsifikaatori, et piirata tagastatavat andmekogumit. See funktsioon sisse praegu on Firebird DBMS-i jaoks väljatöötamisel. (Spetsifikaadid FIRST ja SKIP võeti kasutusele Firebirdi DBMS-is alates versioonist 1.5 – ligikaudu tõlgitud.)

Nii MS SQL kui ka Firebird DBMS toetavad lause INSERT ja INSERT..SELECT tavalist süntaksit.

Nii MS SQL kui ka Firebird DBMS toetavad tavalist UPDATE avalduse süntaksit. MS SQL DBMS toetab ka UPDATE avalduse süntaksit, milles tehakse liitumine ja värskendatakse üht liitumistabelit. Võite seda mõelda kui KUS tingimus steroidide peal. Kui sellist funktsiooni on tõesti vaja, saab selle vaadete abil Firebird DBMS-is realiseerida.

Nii MS SQL kui ka Firebird DBMS toetavad tavalist süntaksit DELETE operaator. MS SQL DBMS toetab ka operaatorit TRUNCATE TABLE, mis on tõhusam (aga ka ohtlikum) kui DELETE operaator. (MS SQL DBMS toetab ka DELETE-lause süntaksit, milles ühendamine toimub. - ligikaudu tõlge.)

/* MS SQL süntaks kõigi minu_tabeli kirjete kustutamiseks. */ TRUNCATE TABLE my_table /* ...või... */ DELETE FROM FROM my_table /* Firebirdi süntaks. */ KUSTUTA minu_tabelist

Tehingute kasutamine

Firebirdi DBMS-is ei kasutata tehinguid DSQL-is (dünaamiline SQL) "otse". Sel juhul pole nimelised tehingud üldse saadaval. (DSQL-laused täidetakse kliendirakenduse poolt käivitatud ja kontrollitud tehingute kontekstis. - umbes tõlge.) Mõlema DBMS-i süntaks toetab ühilduvuse tagamiseks märksõna WORK.

Enamasti ei tohiks tehingutega probleeme tekkida: MS SQL DBMS-is kasutatakse tavaliselt eksplitsiitset kohapealset tehinguhaldust, kuna erandite kaudu haldamist ei toetata.

Pole hea...

MS SQL DBMS-il on globaalne muutuja XACT_ABORT, mis juhib tehingu tagasipööramist käitusaegse vea ilmnemisel. Vastasel juhul peate pärast iga avalduse täitmist kontrollima muutuja @@ERROR väärtust.

Üldiselt kaob Firebird DBMS-ile üleminekul enamik MS SQL DBMS-i tehingute isolatsioonitasemetega seotud probleeme. Konkurents “lugejate” ja “kirjutajate” vahel on mitme põlvkonna arhitektuuri (MGA) kasutamise tõttu minimaalne.

MS SQL DBMS-is kasutatakse kursoreid peamiselt päringute tulemustes liikumiseks, et nende tulemustega teatud toiminguid teha. Peale süntaksi pole sama ülesande täitmisel palju erinevusi. Kuigi edasi-tagasi liikumiseks on võimalusi, kasutatakse praktikas enamasti ühesuunalisi kursoreid.

/* MS SQL süntaks. */ DECLARE my_cursor FOR SELECT au_lname CURSOR FOR SELECT au_lname autoritelt ORDER BY au_lname DECLARE @au_lname varchar(40) OPEN my_cursor FETCH NEXT FROM FROM my_cursor INTO @au_lname WHILE @@FETCH_STATUS. Tehke midagi huvitavat koos BEGIN /*. */ TOOMINE minu_kursorist JÄRGMINE LÕPP SULGE minu_kursor TÕHISTAMINE minu_kursor /* Firebirdi süntaks. */ DECLARE VARIABLE au_lname VARCHAR(40); ... FOR SELECT au_lname autoritelt ORDER BY au_lname INTO:au_lname DO BEGIN /* Tehke rakendusega au_lname midagi huvitavat. */ LÕPP

Pange tähele, et MS SQL DBMS võib asetada kursorid muutujatesse ja edastada need muutujad parameetritena; Firebirdi DBMS-is pole see võimalik.