sintaksa sql poslužitelja. Uvod u MS SQL Server i T-SQL. Korištenje UDF-a s više naredbi

Ovdje puni popis funkcije za rad sa stringovima, preuzete iz BOL-a:

ASCII NCHAR SOUNDEX
CHAR PATINDEX PROSTOR
CHARINDEX ZAMIJENITI ULICA
RAZLIKA QUOTENAME STVARI
LIJEVO PONOVITI PODNIZ
LEN OBRNUTI UNICODE
DONJI PRAVO GORNJI
LTRIM RTRIM

Počnimo s dva međusobno inverzne funkcije - ASCII I CHAR.

ASCII funkcija vraća ASCII kod krajnjeg lijevog znaka izraza niza koji je argument funkcije.

Evo, na primjer, kako možete odrediti koliko imate različita slova, s kojim počinju imena brodova u tablici Brodovi:


Treba napomenuti da se sličan rezultat može lakše dobiti pomoću druge funkcije - LIJEVO, koji ima sljedeću sintaksu:

LIJEVO (<string izraz>, <cjelobrojni izraz>)

i reže broj znakova slijeva određen drugim argumentom iz niza koji je prvi argument. Tako,

SELECT DISTINCT LEFT(name, 1) FROM Ships ORDER BY 1

Evo kako, na primjer, možete dobiti tablicu kodova za sve abecedne znakove:

SELECT CHAR(ASCII("a")+ num-1) slovo, ASCII("a")+ num - 1
FROM (SELECT 5*5*(a-1)+5*(b-1) + c AS broj
FROM (SELECT 1 a UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) x
KRIŽNI SPOJ
(SELECT 1 b UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) y
KRIŽNI SPOJ
(SELECT 1 c UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) z
)x
WHERE ASCII("a")+ num -1 IZMEĐU ASCII("a") I ASCII("z")

Za one koji još nisu svjesni generiranja niza brojeva, upućujem vas na odgovarajući članak.

Kao što je poznato, kodovi malih slova i velika slova su različiti. Stoga, da biste dobili kompletan set Bez ponovnog pisanja zahtjeva, samo trebate dodati sličan u gornji kod:


Mislim da ne bi bilo previše teško dodati ovo slovo u tablicu ako je potrebno.

Razmotrimo sada zadatak određivanja gdje pronaći željeni podniz u izrazu niza. Za to se mogu koristiti dvije funkcije - CHARINDEX I PATINDEX. Oba vraćaju početnu poziciju (poziciju prvog znaka podniza) podniza u nizu. Funkcija CHARINDEX ima sljedeću sintaksu:

CHARINDEX( izraz za pretraživanje, niz_izraza[, početna_pozicija])

Ovdje je neobavezan cjelobrojni parametar početna_pozicija definira poziciju u string izrazu s koje se vrši pretraga izraz za pretraživanje. Ako je ovaj parametar izostavljen, pretraga se izvodi od početka niz_izraza. Na primjer, zahtjev

Treba imati na umu da ako je traženi podniz ili izraz niza NULL, tada će rezultat funkcije također biti NULL.

Sljedeći primjer određuje položaje prvog i drugog pojavljivanja znaka "a" u nazivu broda "California"

SELECT CHARINDEX("a",ime) prvi_a,
CHARINDEX("a", ime, CHARINDEX("a", ime)+1) drugi_a
FROM Brodovi WHERE name="California"

Imajte na umu da se prilikom definiranja drugog znaka u funkciji koristi početna pozicija, a to je pozicija znaka iza prvog slova "a" - CHARINDEX("a", ime)+1. Točnost rezultata - 2 i 10 - lako je provjeriti :-).

Funkcija PATINDEX ima sljedeću sintaksu:

PATINDEX("% uzorak%" , niz_izraza)

Glavna razlika između ove funkcije i CHARINDEX je ta niz za pretraživanje može sadržavati zamjenski znakovi- % i _. U ovom slučaju potrebni su znakovi na kraju "%". Na primjer, korištenje ove funkcije u prvom primjeru izgledalo bi ovako


Rezultat ovog upita izgleda ovako:


Činjenica da završimo s praznim skupom rezultata znači da nema takvih brodova u bazi podataka. Uzmimo kombinaciju vrijednosti - klasu i ime broda.

Poziva se kombiniranje dvije vrijednosti niza u jednu ulančavanje, i u SQL poslužitelj za ovu operaciju koristi se znak "+" (u standardu "||"). Tako,

Što ako string izraz sadrži samo jedno slovo? Upit će ga prikazati. To možete lako provjeriti pisanjem

Za dohvaćanje podataka iz baze podataka koristi se SQL jezik. SQL je programski jezik koji je vrlo sličan engleskom, ali je namijenjen programima za upravljanje bazom podataka. SQL se koristi u svakom upitu u Accessu.

Razumijevanje principa SQL rad pomaže stvoriti više točni upiti i olakšava popravljanje upita koji vraćaju netočne rezultate.

Ovo je članak iz serije članaka o SQL jeziku za Access. Opisuje osnove korištenja SQL-a za dohvaćanje podataka i daje primjere SQL sintakse.

U ovom članku

Što je SQL?

SQL je programski jezik dizajniran za rad sa skupovima činjenica i odnosima između njih. U kontrolnim programima relacijske baze podataka podaci kao što su Microsoft Office Za rad s podacima koristi se Access, jezik SQL. Za razliku od mnogih programskih jezika, SQL je čitljiv i razumljiv čak i početnicima. Kao i mnogi programski jezici, SQL je međunarodni standard, priznat od strane odbora za standardizaciju kao što su ISO i ANSI.

Skupovi podataka opisani su u SQL-u kako bi pomogli odgovoriti na pitanja. Na koristeći SQL mora se koristiti ispravna sintaksa. Sintaksa je skup pravila koja omogućuju ispravno kombiniranje elemenata jezika. SQL sintaksa na temelju sintakse engleski jezik i ima mnogo zajedničkih elemenata sa sintaksom Vizualni jezik Basic for Applications (VBA).

Na primjer, jednostavno SQL izjava, koji dohvaća popis prezimena kontakata s imenom Mary, mogao bi izgledati ovako:

SELECT Prezime
IZ Kontakti
WHERE Ime = "Marija";

Bilješka: SQL jezik se ne koristi samo za izvođenje operacija nad podacima, već i za stvaranje i promjenu strukture objekata baze podataka, kao što su tablice. Dio SQL-a koji se koristi za stvaranje i modificiranje objekata baze podataka naziva se DDL. DDL nije obuhvaćen ovim člankom. Više informacija pogledajte Stvaranje ili izmjena tablica ili indeksa pomoću upita za definiciju podataka.

SELECT izjave

Naredba SELECT koristi se za opisivanje skupa podataka u SQL-u. Sadrži puni opis skup podataka koje je potrebno dohvatiti iz baze podataka, uključujući sljedeće:

    tablice koje sadrže podatke;

    veze između podataka iz različiti izvori;

    polja ili izračuni na temelju kojih se biraju podaci;

    uvjete odabira koje moraju zadovoljiti podaci uključeni u rezultat upita;

    nužnost i način razvrstavanja.

SQL izjave

SQL naredba sastoji se od nekoliko dijelova koji se nazivaju klauzulama. Svaka klauzula u SQL izjavi ima svrhu. Potrebne su neke ponude. Donja tablica pokazuje SQL izjave najčešće korišten.

SQL izjava

Opis

Obavezno

Definira polja koja sadrže potrebne podatke.

Definira tablice koje sadrže polja navedena u klauzuli SELECT.

Definira uvjete odabira polja koje moraju zadovoljiti svi zapisi uključeni u rezultate.

Određuje redoslijed sortiranja rezultata.

U SQL izrazu koji sadrži funkcije združivanja, specificira polja za koja vrijednost sažetka nije izračunata u klauzuli SELECT.

Samo ako su takva polja prisutna

SQL izraz koji sadrži funkcije združivanja definira uvjete koji se primjenjuju na polja za koja se izračunava vrijednost sažetka u klauzuli SELECT.

SQL pojmovi

Svaka SQL rečenica sastoji se od pojmova koji se mogu usporediti s dijelovima govora. Donja tablica prikazuje vrste SQL izraza.

SQL izraz

Usporedni dio govora

Definicija

Primjer

identifikator

imenica

Naziv koji se koristi za identifikaciju objekta baze podataka, kao što je naziv polja.

Klijenti [Broj telefona]

operater

glagol ili prilog

Ključna riječ koja predstavlja ili modificira radnju.

konstanta

imenica

Vrijednost koja se ne mijenja, kao što je broj ili NULL.

izraz

pridjev

Kombinacija identifikatora, operatora, konstanti i funkcija dizajniranih za izračunavanje jedne vrijednosti.

>= Proizvodi.[Cijena]

Osnovne SQL klauzule: SELECT, FROM i WHERE

Opći format SQL naredbi je:

SELECT polje_1
IZ tablice_1
WHERE kriterij_1
;

Bilješke:

    Access ne poštuje prijelome redaka u SQL izjavama. Unatoč tome, preporučuje se započeti svaku rečenicu s nova linija tako da je SQL naredba laka za čitanje i za osobu koja ju je napisala i za sve ostale.

    Svaka SELECT naredba završava točkom i zarezom (;). Točka-zarez se može pojaviti ili na kraju zadnje rečenice ili u zasebnom retku na kraju SQL naredbe.

Primjer u Accessu

Primjer u nastavku pokazuje kako bi SQL izjava mogla izgledati u programu Access for jednostavan zahtjev po uzorku.

1. SELECT klauzula

2. OD odredbe

3. WHERE klauzula

Pogledajmo primjer rečenicu po rečenicu da bismo razumjeli kako funkcionira SQL sintaksa.

SELECT klauzula

SELECT, tvrtka

Ovo je SELECT klauzula. Sadrži naredbu (SELECT) iza koje slijede dva identifikatora ("[Adresa elektronička pošta]" i "Tvrtka").

Ako identifikator sadrži razmake ili posebni znakovi(na primjer, "Adresa e-pošte"), mora biti u pravokutnim zagradama.

Klauzula SELECT ne zahtijeva da navedete tablice koje sadrže polja i ne možete navesti uvjete odabira koje moraju ispuniti podaci uključeni u rezultate.

U SELECT naredbi, SELECT klauzula uvijek dolazi prije FROM klauzule.

FROM klauzula

IZ Kontakti

Ovo je FROM klauzula. Sadrži izjavu (FROM) nakon koje slijedi identifikator (Kontakti).

Klauzula FROM ne specificira polja za odabir.

WHERE klauzula

WHERE Grad="Seattle"

Ovo je klauzula WHERE. Sadrži izjavu (WHERE) iza koje slijedi izraz (City="Rostov").

Postoje mnoge stvari koje možete učiniti s klauzulama SELECT, FROM i WHERE. Za više informacija o korištenju ovih ponuda pogledajte sljedeće članke:

Razvrstavanje rezultata: ORDER BY

Kao u Microsoft Excel, u Accessu možete sortirati rezultate upita u tablici. Korištenjem klauzule ORDER BY, također možete odrediti kako se rezultati sortiraju kada se upit izvrši. Ako se koristi klauzula ORDER BY, mora se pojaviti na kraju SQL naredbe.

Klauzula ORDER BY sadrži popis polja za sortiranje, istim redoslijedom kojim će se sortiranje primijeniti.

Pretpostavimo, na primjer, da rezultate najprije treba sortirati prema polju "Tvrtka" silaznim redoslijedom, a zatim ako postoje zapisi s ista vrijednost polja "Tvrtka", - poredajte ih prema polju "E-mail adresa" uzlaznim redoslijedom. Klauzula ORDER BY bi izgledala ovako:

ORDER BY Company DESC,

Bilješka: Prema zadanim postavkama, Access razvrstava vrijednosti uzlaznim redoslijedom (A do Z, od najmanje do najveće). Da biste umjesto toga sortirali vrijednosti silaznim redoslijedom, morate navesti ključna riječ OPIS

Za više informacija o klauzuli ORDER BY, pogledajte članak o klauzuli ORDER BY.

Rad sa sažetim podacima: klauzule GROUP BY i HAVING

Ponekad morate raditi sa sažetim podacima, kao što je ukupna prodaja za mjesec ili najskuplji artikli na zalihama. Da biste to učinili, u klauzuli SELECT primijenite na polje funkcija agregata. Na primjer, ako biste pokrenuli upit da biste dobili broj adresa e-pošte za svaku tvrtku, klauzula SELECT mogla bi izgledati ovako:

Mogućnost korištenja određene agregatne funkcije ovisi o vrsti podataka u polju i željeni izraz. Za više informacija o dostupnim agregatnim funkcijama pogledajte SQL Statističke funkcije.

Određivanje polja koja se ne koriste u agregatnoj funkciji: klauzula GROUP BY

Kada koristite agregatne funkcije, obično morate stvoriti klauzulu GROUP BY. Klauzula GROUP BY navodi sva polja na koja se ne primjenjuje agregatna funkcija. Ako se agregatne funkcije primjenjuju na sva polja u upitu, ne morate stvoriti klauzulu GROUP BY.

Klauzula GROUP BY mora odmah slijediti klauzulu WHERE ili FROM ako ne postoji klauzula WHERE. Klauzula GROUP BY navodi polja istim redoslijedom kao klauzula SELECT.

Nastavimo prethodni primjer. U klauzuli SELECT, ako se agregatna funkcija primjenjuje samo na polje [Adresa e-pošte], klauzula GROUP BY bi izgledala ovako:

GRUPIRAJ PO Tvrtki

Za više informacija o klauzuli GROUP BY pogledajte članak o klauzuli GROUP BY.

Ograničavanje agregiranih vrijednosti korištenjem uvjeta grupiranja: klauzula HAVING

Ako trebate navesti uvjete za ograničavanje rezultata, ali koristi se polje na koje ih želite primijeniti funkcija agregata, klauzula WHERE se ne može koristiti. Umjesto toga treba koristiti klauzulu HAVING. Klauzula HAVING radi isto kao i klauzula WHERE, ali se koristi za agregirane podatke.

Pretpostavimo, na primjer, da je prvo polje u klauzuli SELECT AVG funkcija(koji izračunava prosjek):

SELECT COUNT(), Tvrtka

Ako želite ograničiti rezultate upita na temelju vrijednosti funkcije COUNT, ne možete primijeniti uvjet odabira na ovo polje u klauzuli WHERE. Umjesto toga, uvjet treba staviti u klauzulu HAVING. Na primjer, ako želite da vaš upit vrati retke samo ako tvrtka ima više adresa e-pošte, možete koristiti sljedeću klauzulu HAVING:

IMAJUĆI BROJ()>1

Bilješka: Upit može uključivati ​​i klauzulu WHERE i klauzulu HAVING, s uvjetima odabira za polja koja se ne koriste u statističke funkcije, navedeni su u klauzuli WHERE, a uvjeti za polja koja se koriste u statističkim funkcijama navedeni su u klauzuli HAVING.

Za više informacija o klauzuli HAVING pogledajte članak o klauzuli HAVING.

Kombiniranje rezultata upita: operator UNION

Operator UNION koristi se za simultani pregled svih podataka koje vraća više sličnih upita za odabir kao kombinirani skup.

Operator UNION omogućuje vam kombiniranje dvije SELECT naredbe u jednu. SELECT izjave koje se spajaju moraju imati isti broj i redoslijed izlaznih polja s istim ili kompatibilnim tipovima podataka. Kada pokrenete upit, podaci iz svakog skupa podudarnih polja kombiniraju se u jedno izlazno polje, tako da izlaz upita ima onoliko polja koliko i svaka pojedinačna izjava SELECT.

Bilješka: U upitima za pridruživanje numeričkim i vrste teksta podaci su kompatibilni.

Pomoću operatora UNION možete odrediti trebaju li duplikati redaka, ako ih ima, biti uključeni u rezultate upita. Da biste to učinili, upotrijebite ključnu riječ SVE.

Zahtjev za spajanje dva SELECT izjave ima sljedeću osnovnu sintaksu:

SELECT polje_1
IZ tablice_1
UNIJA
SELECT polje_a
IZ tablice_a
;

Na primjer, pretpostavimo da imate dvije tablice pod nazivom "Proizvodi" i "Usluge". Obje tablice sadrže polja s nazivom proizvoda ili usluge, podatke o cijeni i jamstvu, kao i polje koje označava ekskluzivnost ponuđenog proizvoda ili usluge. Iako tablice "Proizvodi" i "Usluge" pružaju različite vrste jamstva, osnovne informacije su iste (jesu li određeni proizvodi ili usluge osigurani uz jamstvo kvalitete). Možete koristiti sljedeći upit za spajanje za spajanje četiri polja iz dvije tablice:

ODABERITE ime, cijenu, jamstvo_dostupno, ekskluzivna_ponuda
OD proizvoda
UNIJA SVE
ODABERITE ime, cijenu, jamstvo_dostupno, ekskluzivna_ponuda
FROM usluge
;

Za više informacija o kombiniranju naredbi SELECT pomoću operatora UNION pogledajte

Zadnja izmjena: 24.06.2017

SQL Server je jedan od naj popularni sustavi upravljanje bazom podataka (DBMS) u svijetu. Ovaj DBMS je prikladan za širok raspon projekata: od malih aplikacija do velikih, visoko opterećenih projekata.

SQL Server je stvoren od strane Microsofta. Prva verzija izašla je 1987. A trenutna verzija je verzija 16, koja je izašla 2016. i koristit će se u trenutnom vodiču.

SQL poslužitelj dugo vremena je bio isključivo sustav za upravljanje bazama podataka za Windows, ali od verzije 16 ovaj sustav je dostupan i na Linuxu.

SQL Server karakteriziraju značajke kao što su:

    Performanse. SQL Server je vrlo brz.

    Pouzdanost i sigurnost. SQL Server pruža enkripciju podataka.

    Jednostavnost. Ovaj DBMS je relativno jednostavan za rad i administraciju.

Središnji aspekt MS SQL Servera, kao i svakog DBMS-a, je baza podataka. Baza podataka je spremište podataka organiziranih na određeni način. Često baza podataka fizički predstavlja datoteku na tvrdom disku, iako to dopisivanje nije potrebno. Sustavi za upravljanje bazama podataka ili DBMS-ovi koriste se za pohranjivanje i administriranje baza podataka. A upravo je MS SQL Server jedan od takvih DBMS-a.

Za organiziranje baza podataka koristi se MS SQL Server relacijski model. Ovaj model baze podataka je davne 1970. godine razvio Edgar Codd. A danas je to zapravo standard za organizaciju baza podataka.

Relacijski model uključuje pohranu podataka u obliku tablica, od kojih se svaka sastoji od redaka i stupaca. Svaka linija pohranjuje zasebni objekt, a stupci sadrže atribute ovog objekta.

Primarni ključ se koristi za identifikaciju svakog retka unutar tablice. Primarni ključ može biti jedan ili više stupaca. Koristeći primarni ključ na koji se možemo pozvati određeni niz u tablici. Prema tome, dva retka ne mogu imati isti primarni ključ.

Preko ključeva se jedna tablica može povezati s drugom, odnosno mogu se organizirati odnosi između dvije tablice. I sama tablica se može prikazati kao odnos.

Za interakciju s bazom podataka koristi se jezik SQL (Structured Query Language). Klijent (na primjer, vanjski program) šalje zahtjev u SQL-u koristeći poseban API. DBMS ispravno tumači i izvršava zahtjev, a zatim šalje rezultat izvršenja klijentu.

SQL je izvorno razvio IBM za sustav baze podataka pod nazivom System/R. Ujedno je i sam jezik nazvan SEQUEL (Structured English Query Language). Iako ni baza podataka ni sam jezik kasnije nisu službeno objavljeni, tradicionalno se sam izraz SQL često izgovara kao "nastavak".

Godine 1979. Relacijska Software Inc. razvio prvi sustav za upravljanje bazom podataka, nazvan Oracle, koji je koristio SQL jezik. Zbog uspjeha ovog proizvoda tvrtka je preimenovana u Oracle.

Nakon toga su se počeli pojavljivati ​​drugi sustavi baza podataka koji su koristili SQL. Kao rezultat toga, 1989. godine Američki nacionalni institut za standarde (ANSI) kodificirao je jezik i objavio svoj prvi standard. Nakon toga, standard je povremeno ažuriran i dopunjen. Njegovo posljednje ažuriranje dogodilo se 2011. Ali unatoč postojanju standarda, proizvođači DBMS-a često koriste svoje vlastite implementacije SQL jezik, koji se međusobno malo razlikuju.

Postoje dvije varijante SQL jezika: PL-SQL i T-SQL. PL-SQL se koristi u DBMS-ovima kao što su Oracle i MySQL. T-SQL (Transact-SQL) koristi se u SQL Serveru. Zapravo, to je razlog zašto ćemo T-SQL razmatrati u ovom vodiču.

Ovisno o zadatku koji T-SQL naredba izvodi, može biti jedna od sljedećih vrsta:

    DDL (Jezik za definiranje podataka). Ova vrsta uključuje različite naredbe koje stvaraju bazu podataka, tablice, indekse, pohranjene procedure itd. Općenito, podaci su određeni.

    Konkretno, sljedeće naredbe možemo klasificirati kao ovu vrstu:

    • CREATE : stvara objekte baze podataka (samu bazu podataka, tablice, indekse itd.)

      ALTER: mijenja objekte baze podataka

      DROP: Uklanja objekte baze podataka

      TRUNCATE: uklanja sve podatke iz tablica

    DML (jezik za manipulaciju podacima). U ovu vrstu spadaju naredbe za odabir podataka, njihovo ažuriranje, dodavanje, brisanje – općenito sve one naredbe kojima možemo upravljati podacima.

    Ovoj vrsti pripadaju sljedeće naredbe:

    • SELECT: dohvaća podatke iz baze podataka

      AŽURIRANJE: ažurira podatke

      INSERT: dodaje nove podatke

      DELETE: briše podatke

    DCL (Jezik kontrole podataka / Jezik kontrole pristupa podacima). Ova vrsta uključuje naredbe koje upravljaju pravima pristupa podacima. Konkretno, to su sljedeće naredbe:

    • GRANT: daje dopuštenja za pristup podacima

      REVOKE: opoziva prava pristupa podacima

SQL sintaksa

Ovaj odjeljak opisuje glavne razlike u sintaksi SQL jezika koji koriste Firebird DBMS i MS SQL.

Firebird i MS SQL DBMS mogu izravno upućivati ​​na objekte baze podataka (tablice, polja, itd.) njihovim imenima, ako nazivi objekata ne sadrže razmake ili druge znakove koji nisu dopušteni u izravnoj vezi (na primjer, nelatinična slova ). Za korištenje razmaka i drugih znakova, MS SQL DBMS koristi uglate zagrade, [ i ] , a Firebird DBMS koristi dvostruki navodnici, ". Još jedna razlika je mogućnost korištenja u MS DBMS-u SQL sheme za referencu objekta: vlasnik_objekta_baze podataka.objekt. Firebird DBMS ne dopušta ovu notaciju.

Pažnja

MS SQL DBMS koristi imena objekata koja razlikuju velika i mala slova ako ste tijekom instalacije odabrali korištenje znakova koji razlikuju velika i mala slova;

inače, nazivi objekata su neosjetljivi na velika i mala slova. smiješno? nije dobro...

Trag

MS SQL DBMS može raditi s identifikatorima čija su imena u dvostrukim navodnicima, ali prema zadanim postavkama ova je značajka dostupna samo kada joj se pristupa putem OLE DB i ODBC, ali ne i kada joj se pristupa putem DB-Library. Iz tog razloga ovu praksu rada treba izbjegavati.

DBMS MS SQL 7 i noviji podržava spojeve koji se mogu ažurirati (ažuriranje, brisanje, umetanje). Firebird DBMS ne prepoznaje ovu sintaksu.

Vrste podataka, naravno, variraju. Iako oba DBMS-a imaju zajednički podskup najčešće korištenih tipova. Ovaj problem rijetko uzrokuje probleme prilikom migracije baze podataka.

Postoje različiti formati za određivanje konstanti niza za datume. Firebird DBMS prihvaća nizove raznih formata, bez obzira na korištenu platformu. MS SQL DBMS, pak, koristi kombinaciju formata neovisnih o poslužitelju, platformi poslužitelja i formata postavljanja veze klijenta. Uz to, metode pristupa MS SQL DBMS-u obično uvode jednu ili dvije razine u kojima se konstanta niza može pretvoriti u datum na ovaj ili onaj način.

U MS SQL DBMS možete definirati više varijable okruženja nego u Firebird DBMS-u, ali najčešće se mogu pronaći u Firebird DBMS-u (dohvaćanje identifikatora i korisničkog imena). Jedina bitna varijabla koja nedostaje u Firebird DBMS-u je varijabla koja vraća broj redaka zadnje operacije (od verzije 1.5 Firebird DBMS-a takva varijabla je uvedena - pribl. prev.).

Važna razlika bila je u tome što Firebird 1.0 DBMS nije podržavao CASE naredbu MS SQL DBMS-a. Ponekad je bilo moguće zamijeniti njegovu funkcionalnost korištenjem pohranjene procedure. Počevši od verzije 1.5, Firebird DBMS podržava korištenje CASE operatora.

Mala razlika između DBMS-a je u tome što MS SQL DBMS ne koristi graničnike za naredbe, što može biti izvor teško uočljivih grešaka tijekom prijelaza, posebno kada se koristi mnogo zagrada. Firebird DBMS u skriptama zahtijeva završetak svake izjave točkom i zarezom (osim ako nije definiran neki drugi graničnik - pribl. prijevod), tako da je greške lakše otkriti.

I MS SQL i Firebird podržavaju komentare između graničnika /* i */. MS SQL DBMS također podržava sintaksu "dvije crtice" za komentar u jednom retku. Neki Firebird DBMS pomoćni programi također podržavaju ovu sintaksu.

DOK

WHILE operator postoji iu Firebirdu iu MS SQL DBMS-u, ali s nekim razlikama. Ne postoji BREAK operatori ili CONTINUE , ali se mogu oponašati pomoću dodatnih konstrukata. Također postoji mala razlika u korištenoj sintaksi: Firebird DBMS zahtijeva DO ključnu riječ nakon uvjeta petlje. Usporedite sljedeće ekvivalentne dijelove koda.

/* Firebird sintaksa. */ DOK (tj< 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

POVRATAK

Operator RETURN u MS SQL DBMS-u vraća vrijednost cjelobrojne varijable i zaustavlja izvršenje. U Firebird DBMS-u postoji naredba EXIT koja prenosi kontrolu na konačni END pohranjene procedure. Međutim, ne postoji skrivena povratna varijabla, pa ako trebate vratiti vrijednost (što je izborno u MS SQL-u), morate eksplicitno deklarirati povratnu varijablu u proceduri.

ČEKATI

Operator WAITFOR u MS SQL DBMS-u obustavlja izvršenje na neko vrijeme ili do navedenog vremena.

Nešto slično se može učiniti korištenjem korisnički definiranih funkcija (UDF) u Firebird DBMS-u. Ali u oba DBMS-a treba isključiti korištenje takvog operatora, jer je interakcija s klijentom potpuno obustavljena (u Firebird DBMS-u to može dovesti do obustave servisiranja svih veza, a ne samo veze koja je pozvala analogni navedenog operatera - pribl.

Standardni operatori Standardni operatori

dostupni u oba DBMS-a su SELECT, INSERT, UPDATE i DELETE.

Firebird i MS SQL DBMS ih podržavaju, ali MS SQL DBMS ima nekoliko nestandardnih proširenja za ove operatore o kojima treba razgovarati u slučaju da se koriste.

U Firebird DBMS-u, naredba SELECT vam ne dopušta korištenje ključne riječi INTO za stvaranje nove tablice u hodu. Umjesto toga, ključna riječ INTO koristi se za povezivanje rezultata upita s varijablom. /* MS SQL sintaksa za dodjeljivanje vrijednosti polja varijabli. */ SELECT @my_state = stanje FROM autora WHERE auth_name = "John" /* Firebird sintaksa. */ SELECT stanje INTO:state /* --> obratite pažnju na ":" ispred naziva varijable */ FROM autora WHERE auth_name = "John" U DBMS MS SQL 7 i novijim verzijama SELECT izjava Možete navesti TOP specifikator da ograničite vraćeni skup podataka. Ova funkcija u

sadašnji trenutak

je u razvoju za Firebird DBMS. (FIRST i SKIP specifikatori uvedeni su u Firebird DBMS počevši od verzije 1.5 - pribl. prijevod.) na steroidima. Ako je takva funkcija stvarno potrebna, onda se može implementirati u Firebird DBMS korištenjem pogleda.

I MS SQL i Firebird DBMS podržavaju regularnu sintaksu DELETE operator. MS SQL DBMS također podržava operator TRUNCATE TABLE, koji je učinkovitiji (ali i opasniji) od operatora DELETE.

(MS SQL DBMS također podržava sintaksu naredbe DELETE u kojoj se spajanje izvodi. - pribl. prijevod.)

/* MS SQL sintaksa za brisanje svih unosa my_table. */ TRUNCATE TABLE my_table /* ...ili... */ DELETE FROM my_table /* Firebird sintaksa. */ IZBRIŠI IZ moje_tablice

Korištenje Transakcija

U Firebird DBMS-u, transakcije se ne koriste "izravno" u DSQL-u (dinamički SQL). U ovom slučaju imenovane transakcije uopće nisu dostupne. (DSQL izjave se izvode u kontekstu transakcija koje pokreće i kontrolira aplikacija klijenta. - pribl. prijevod.) Sintaksa oba DBMS-a podržava ključnu riječ WORK radi kompatibilnosti.

inače, nazivi objekata su neosjetljivi na velika i mala slova. smiješno? nije dobro...

U većini slučajeva problemi s transakcijama ne bi trebali nastati: obično se koristi eksplicitno upravljanje transakcijama na licu mjesta u MS SQL DBMS-u zbog nedostatka podrške za upravljanje putem iznimaka.

MS SQL DBMS ima globalnu varijablu XACT_ABORT, koja kontrolira vraćanje transakcije unatrag kada se pojavi greška u vremenu izvođenja.

U suprotnom, trebate provjeriti vrijednost varijable @@ERROR nakon izvršavanja svake naredbe.

/* MS SQL sintaksa. */ DECLARE my_cursor CURSOR FOR SELECT au_lname FROM authors ORDER BY au_lname DECLARE @au_lname varchar(40) OPEN my_cursor FETCH NEXT FROM my_cursor INTO @au_lname WHILE @@FETCH_STATUS = 0 BEGIN /* Učinite nešto zanimljivo s @au_lname. */ FETCH NEXT FROM my_cursor END CLOSE my_cursor DEALLOCATE my_cursor /* Firebird sintaksa. */ DEKLARACIJA VARIJABLE au_lname VARCHAR(40);

... FOR SELECT au_lname FROM autora ORDER BY au_lname INTO:au_lname DO BEGIN /* Učinite nešto zanimljivo s au_lname. */ KRAJ