Kuigi enamikes olukordades on andmetüübist tulenev piirang täiesti piisav, on palju olukordi, kus oleks soov täpsemalt määratleda andmete iseloom.
Andmetele piirangute seadmisel tulevad appi konstraandid e. piirangud.
Piiranguid on võimalik seada nii ühele väljale kui ka kirjele.
Ühele väljale e. veerule seatavad piirangud on enamasti kitsendused andmetüübile. Näiteks oleme loonud aastaarvude hoidmiseks
[crayon-68109d5c58430084416810/]
Kirje piirangutega kirjeldatakse seoseid samal real asuvate väljade vahel. Näiteks kui me soovime hoida andmebaasis laste juures õpingute alguse ja lõpu aega, saaksime seada piirangu, mis ütleks, et algus peab olema enne lõppu.
Konstraantide rakendamine on väga kiire ning neist on abi nii andmete sisestamisel andmeühtsuse tagamisel kui ka päringute tegemisel.
Konstraante on võimalik salvestada andmebaasi ka eraldiseisvate objektide e. reeglitena.
[crayon-68109d5c58435956572976/]
Sellisel kujul reegleid on võimalik rakendada tabeli väljadele otseselt kui ka läbi oma andmetüüpide.
Reeglite kleepimiseks andmetüübi külge tuleb kasutada salvestatud protseduuri sp_bindrule:
[crayon-68109d5c58437563972566/]
Indeksid
Esmajärjekorras on indeksid mõeldud andmete otsingu kiirendamiseks. Indekseerimist tasub kaaluda kõigil väljadel mida kasutatakse WHERE ja GROUP BY lauseosas ning millel rakendatakse agregaatfunktsioone.
Teiseks saab indeksitega peale suruda andmete unikaalsust kas ühel väljal või väljade kombinatsioonis. Sisuliselt on unikaalne indeks ka juba varem kasutatud primaarvõti.
Indekseid saab luua CREATE INDEX lausega. Näiteks loome unikaalse indeksi auto registrinumbrite tarbeks:
[crayon-68109d5c58439379782653/]
Või indekseerime sorteerimise lihtsustamiseks laste nimed
[crayon-68109d5c5843b657528713/]
Miinuspoolelt võib välja tuua, et igasugused muudatused indekseeritud väljadel toovad endaga kaasa muudatused indeksites ning seega muutuvad muutmistegevused (lisamine, muutmine, kustutamine) aeglasemaks. Samas aitavad indeksid kaasa muudetavate kirjete leidmisel.
Alates SQL Server 2000 on võimalik tekitada indekseid ka vaadetele!
Ajutiste tabelite kasutamine
Kirjutades keerukamaid programme on aeg-ajalt kasulik mingid vahetulemused meelde jätta. Üks võimalus selleks on ajutiste tabelite kasutamine.
Ajutised tabelid on tabelid, mida püsivalt pole vaja, mis on vajalikud vaid ühe konkreetse skripti täitmiseks. Selliseid tabeleid ei hoita enamasti samas kohas päris andmetega. SQL Serveril on sedasorti andmete tarbeks eraldi andmebaas tempdb. Selleks, et tabel läheks ajutisse andmebaasi tuleb tabeli nime ette panna trellid #.
Kui on soov salvestada nt autode loetelu ajutisse tabelisse saame seda teha lihtsa SELECT lausega, millele lisame INTO võtmesõna:
[crayon-68109d5c5843d909658493/]
Sellega oleme tekitanud ajutisse andmebaasi koopia autode tabelist. Ühe trelliga tähistatud ajutised tabelid on sessioonipõhised e. kui katkeb serveriga ühendus, mille kaudu see tabel tehti, kustutatakse tabel automaatselt.
On võimalik luua ka globaalseid ajutisi tabeleid. Selleks tuleb nime ette panna kahed trellid ##. Sellised tabelid kustuvad, kui katkeb viimane seda tabelit kasutav ühendus.
Ajutised tabelid on kasulikud keerukate arvutustulemuste hoidmiseks või keerulistest JOIN lausetest saadud tulemuste hoidmiseks edasiseks töötlemiseks.
Samas tuleb arvestada, et ajutistel tabelitel pole enam mingit seost läheandmetega e. sealt otsimiseks ei saa kasutada indekseid
Tsükkel, valik
Transact-SQL´il on kasutada mitmedki programmeerimiskeelele omased tunnused, kaasa arvatud muutujad, tsükkel ja valik. Nende tutvustamiseks väike koodilõik. Koodilõiku saab eraldi käivitades proovida. Pärast, kui on veendutud, et lõik töötab, saab selle protseduuriks vormistada, kirjutades ette CREATE PROCEDURE protseduurinimi AS.
Siinses näites luuakse kõigepealt kaks muutujat ning määratakse nende tüübid. Nagu näha, on muutujatel @-märk ees.
DECLARE @i INT, @s as VARCHAR(max)
Edasi saavad muutujad enesele väärtused
SET @i=1
SET @s=”
Tsükkel toimib sarnaselt nagu mõnes teiseski keeles. Tsükli keha piiratakse BEGIN ja ENDiga.
WHILE(@i<=10) BEGIN
Sama kehtib valiku kohta. Nagu näha juhul, kui pole tegemist esimese läbimiskorraga, lisatakse olemasoleva teksti lõppu koma. IF-ile saab soovi korral lisada ka ELSE-osa.
IF (@i>1) BEGIN
SET @s=@s+’,’
END
Edasi lisandub teksti lõppu tsükli läbimiskorra number
SET @s=@s+str(@i)
Ning et tsükkel lõputult kordama ei jääks, tuleb järgmise sammuna hoolitseda, et loenduri väärtus suureneks.
SET @i=@i+1
END
Lõpuks võib SELECT-käskluse abil saadud tulemuse päringu käivitajale nähtavaks teha. Edasi saab sellega käituda juba nagu tavalise päringu vastusega.
SELECT @s as tulemus
Edasi kood tervikuna vaatamiseks
[crayon-68109d5c5843f055520446/]
ja väljastatud tulemus:
[crayon-68109d5c58441212519776/]

Muutujasse lugemine
Tahtes üht väärtust päringust kätte saada, saab selle omistada otse SELECT-lause juures.
[crayon-68109d5c58443146707097/]

Samuti võib muutujaid olla rohkem. Lihtsalt iga SELECT´iga küsitud tulba ette tuleb vastav muutuja omistamiseks panna.