Ma az un. Relációs adatmodelleket használjuk. Adatbáziskezelés 70-es évek elején jött létre a magas szintű programozási nyelvek kialakulásával együtt, a számítógépek tömeges elterjedése következtében. Ma az un. Relációs adatmodelleket használjuk. Tehermentesíti a programozót, számos adatkezeléssel kapcsolatos feladat alól. Pl.: Konkurens hozzáférés biztosítása Jogosultság kezelés Adat védelmi szolgáltatások Hatékony fájlrendszer Redundancia mentesség biztosítása (tervezési módszer)
Relációs adatmodell Az adatbázis táblákból áll A táblák sorai az összetartozó adatokat, oszlopai a tulajdonságokat határozzák meg
SQL szerverek Az utasítást szövegként kapja végrehajtja és amennyiben lekérdezés volt visszaküldi az eredménytáblát SQLServer2005ExpressEdition SQLEXPR_ADV.EXE Telepítés Jogosultság: Windows autentikáció (gépnév\IUSR_gépnév = aktuális user) Windows és SQL autentikáció
SQL nyelv DDL: Adatdefiníciós nyelv Adatbázis létrehozása, módosítása, törlése Táblák létrehozása, módosítása, törlése DML: Adatmódosító nyelv Adatok beírása, módosítása, törlése Lekérdezések DCL: Adatvezérlő nyelv Jogosultságkezelés, tárolt eljárások, triggerek, stb.
DDL: Adatdefiníciós nyelv Adatbázis létrehozása, törlése Táblák létrehozása Create database adatbázisnév; Adatbázis létrehozása Drop database adatbázisnév; Adatbázis törlése USE adatbázisnév; adatbázis kijelölése Create table táblanév (oszlopnév adattípus(méret) paraméter, … oszlopnév adattípus(méret) paraméter); tábla létrehozása Pl.: CREATE TABLE dolgozo (D_azon int IDENTITY(1,1) NOT NULL primary key, D_nev nchar(40), D_szul smalldatetime, D_irsz decimal(4,0) DEFAULT(6800) CHECK (D_irsz >= 1000 and D_irsz <= 9999), D_varos nchar(25) DEFAULT(‘Hódmezővásárhely’), D_cim nchar(60));
DDL: Adatdefiníciós nyelv Táblák módosítása, törlése Alter table táblanév művelet; tábla módosítása Pl.: Alter TABLE dolgozo ADD Tel1 nchar(40), Tel2 nchar(40) ; Új oszlop hozzáadása Alter TABLE dolgozo DROP COLUMN Tel2; Oszlop törlése Alter TABLE dolgozo ALTER COLUMN Tel1 nchar(50); Oszlop módosítása Drop table táblanév; tábla törlése
DDL: Adatdefiníciós nyelv Index táblák létrehozása CREATE tipus INDEX indexnév ON táblanév (oszlopnév lista); index létrehozása Index tipus: UNIQUE: egyedi index létrehozása. Nem lehet két rekord, melynél az indexben szereplő oszlopokban ugyanazok az adatok találhatók. CLUSTERED: fizikailag is rendezi a rekordokat. Ebből következik, hogy táblánként csak egy ilyen típusú index lehet. Ha ilyen indexet készítünk, akkor a tábla egészen addig zárolva lesz, amíg az indexelés véget nem ér. NONCLUSTERED: új indexfile keletkezik, ez az alapértelmezett. Pl.: CREATE INDEX nev ON dolgozo (D_Nev) paraméterek; Oszlop módosítása
DDL: Adatdefiníciós nyelv Index táblák létrehozása, törlése A WITH kulcsszó után különböző kapcsolókat adhatunk meg. A PADINDEX kapcsoló határozza meg, hogy egy index belső csomópontjai hány sort tartalmazzanak. Ez nem lehet kevesebb, mint két sor. A PADINDEX kapcsoló használatának a FILLFACTOR kapcsolóval együtt van értelme, mivel az abban megadott százalékarányt használja. A FILLFACTOR kapcsolóval állíthatjuk be, hogy az SQL Server mennyi helyet hagyjon fent az indexlapokon a még várható sorok számára. Azoknál a tábláknál növelheti a teljesítményt, amelyekbe gyakran szúrunk be adatokat. A FILFFACTOR utáni szám azt határozza meg, hogy az indexlapok hány százalékát kell szabadon hagyni. A kisebb érték azoknál a tábláknál használható, amelybe még biztosan több adat kerül. Olyan tábláknál, ahol az adatok nem változnak, a kapcsoló értékét akár 100-ra is állíthatjuk. Az IGNORE_DUP_KEY kapcsoló azt határozza meg, hogy az egyedi index készítésekor (UNIQUE) hogyan viselkedjen az SQL Server, amikor két olyan rekordot talál, melyeknek az indexelt mezőkben lévő adataik megegyeznek. Ha ezt a kapcsolót megadjuk, akkor nem kapunk hibaüzenetet. A SORTED_DATA használatával a CLUSTERED indexek esetén növelhetjük meg az index elkészítésének hatékonyságát. Akkor adjuk meg, ha biztosak vagyunk benne, hogy az indexelendő adatok már az indexnek megfelelő fizikai sorrendben vannak. Az SQL Server ellenőrizni fogja, hogy az adatok tényleg a helyes sorrendben vannak-e, és ha nem, akkor hibaüzenetet küld. Ellenkező esetben a kapcsoló használata jelentősen meggyorsítja az index elkészítését, hiszen az SQL Servernek nem kell rendeznie az adatokat, és ehhez kevesebb helyre is lesz szüksége. A SORTED_DATA_REORG kapcsoló a nem CLUSTERED típusú index esetén is fizikailag sorba rendezi az adatokat az indexnek megfelelően, és eközben csökkenti az adatok töredezettségét is, miáltal jelentősen javul a teljesítmény. Az IGNORE_DUP_ROW kapcsoló a nem egyedi indexszel (UNIQUE), de a CLUSTERED opcióval elkészített indexeknél használható. Ha az index elkészítése közben kettőződött adatokat talál az indexelt mezőkben, akkor törli a kettőzött értékeket, majd hibaüzenetet küld. A ROLLBACK-kel a törölt adatokat visszaállíthatjuk. Ha az ALLOW_DUP_ROW kapcsolót használjuk nem egyedi, CLUSTERED indexek esetén, a kettőzött adatok megengedettek lesznek. Értelemszerűen az IGNORE_DUP_ROW kapcsolóval nem használható együtt. Ha már volt előzőleg létrehozott CLUSTERED index, akkor a DROP_EXISTING kapcsolóval töröltethetjük, majd újra létrehozhatjuk azt. Az összes többi index is frissítésre kerül. A STATISTICS_NORECOMPUTE kapcsolóval kikapcsolhatjuk az elosztási statisztikák frissítését. Ezt a beállítást az UPDATE STATISTICS paranccsal vonhatjuk vissza. Az ON kulcsszó után megadhatjuk azt a fájlcsoportot, amelyet az index számára szeretnénk kijelölni. Ezzel a nem CLUSTERED indexek teljesítményét lehet javítani. CLUSTERED index esetén nem csak az index, hanem az összes adat is átkerül a megadott fájlcsoportba. tábla módosítása Alter TABLE dolgozo DROP COLUMN Tel2; Oszlop törlése Pl.: Alter TABLE dolgozo ALTER COLUMN Tel1 nchar(50); Oszlop módosítása Drop index táblanév.indexnév; index törlése
DML: Adatmódosító nyelv Adatatok beírása, módosítása INSERT INTO táblanév (oszlopnév-litsa) VALUES (értlék-lista); Adatbeírás Pl.: INSERT INTO dolgozo (D_Nev,D_szul,D_Irsz,D_varos,D_cim) VALUES ('Kis Péter','1980-05-15',6800, 'Hódmezõvásárhely', 'Kaszap u 21 2/5'); UPDATE táblanév SET oszlop1= új érték, oszlop2 = új érték WHERE feltétel; adatmódosítás Pl.: UPDATE dolgozo SET D_irsz= 6600, D_varos = 'Szentes' WHERE D_Nev = 'Kis Péter';
DML: Adatmódosító nyelv Adatatok törlése DELETE FROM táblanév WHERE (feltétel); Adattörlés Pl.: DELETE FROM dolgozo WHERE D_Nev = 'Kis Péter';
DML: Adatmódosító nyelv Adatatlekérdezés SELECT. . . oszlop kiválasztása FROM. . . tábla-nevek megadása [WHERE. . .] sorok kiválasztása [GROUP BY. . . csoportosítás [HAVING. . .] ] csoportok közötti választás [ORDER BY. . .] E-tábla rendezése
DML: Adatmódosító nyelv Adatatlekérdezés
1. Kik a partnereink? 2. Mely partnerek budapestiek? 3. Mely partnerek vidékiek?(partnernévre rendezve) 4. Kinek nincs telefonja? 5. Ki hatodik kerületi? 6. Mely “C” –vel kezdődő budapesti partnernek a telefonját nem tudjuk? 7. Ki az, aki gödöllői vagy egri és nevében van “i” ? 8. Milyen különböző nevű cikkeink vannak? 9. Mennyi a cikkek összértéke? 10. Mennyi az 5000 és 10000Ft közötti cikkek összértéke? 11. Hány cikkünk van és mennyibe kerül a legolcsóbb és a legdrágább cikk? 12. Hány különböző nevű cikkünk van? 13. Az egyes számlákon milyen cikkeket vettek? 14. A budapesti partnereink milyen cikkeket vettek? 15. Melyik cikkcsoportban van tíznél kevesebb cikk? 16. Mennyi az egyes számlák végösszege? 17. Mely számlákon szerepel kettőnél több cikk? 18. Melyik a legdrágább cikk? 19. Mely cikkekből nem vásároltak? 20. Mely partner vásárolt az átlagosnál többért a tárgyévben? 21. Hány partner neve szerepel az ábécé egyes betűivel? 22. Cikkcsoportonként melyik termék a legolcsóbb? 23. Emeljük meg a “COAT” cikkcsoportban levő cikkek árát 10%-kal! 24. Mentsük ki a budapesti partnereinket egy külön táblába! 25. Tegyük ki egri partnereinket is ebbe a táblába! 26. Mely partnerek fizettek “készpénz”-zel is és “átutalás”-sal is? 27. Mely partnerek fizettek csak 1-es fizetési móddal (készpénz)? 28. Mely partnerek vásároltak csupán egyszer? 29. Melyik partner nem vásárolt az utóbbi fél évben semmit?
DML: Adatmódosító nyelv Adatatlekérdezés 1. Kik a partnereink? SELECT PartNev FROM Partner; 2. Mely partnerek budapestiek? SELECT PartNev, Varos FROM Partner WHERE Varos = 'Budapest' 3. Mely partnerek vidékiek? (partnernévre rendezve) SELECT PartNev, Varos FROM Partner WHERE Varos <> 'Budapest' ORDER BY PartNev;
DML: Adatmódosító nyelv Adatatlekérdezés 4. Kinek nincs telefonja? SELECT PartNev, Tel1, Tel2 FROM Partner WHERE (Tel1 IS NULL) AND (Tel2 IS NULL) Az üres cella semmivel sem egyenlő és semmitől sem különböző, ezért speciális értékelést alkalmazunk: Tel1 is null igaz, ha Tel1 üres Tel1 is not null igaz, ha Tel1 nem üres
DML: Adatmódosító nyelv Adatatlekérdezés 5. Ki hatodik kerületi? SELECT PartNev, Irszam FROM Partner WHERE Irszam LIKE '106%' A feltételekben helyettesítő karaktereket is használhatunk, de csak a LIKE operátor alkalmazásával. % tetszőleges számú karaktert helyettesíthet _ egy karaktert helyettesíthet A helyettesítő karakterekből többet is elhelyezhetünk egy feltételben p.: Név LIKE’C%’ C betűvel kezdődő nevek Név LIKE’%C%’ C betűt tartalmazó nevek
DML: Adatmódosító nyelv Adatatlekérdezés 6. Mely “C” –vel kezdődő budapesti partnernek a telefonját nem tudjuk? 7. Ki az, aki gödöllői vagy egri és nevében van “i” ? 8. Milyen különböző nevű cikkeink vannak? SELECT DISTINCT Cikknev FROM Cikk; A SELECT után megadott DISTINCT kulcsszó a duplikált sorok szűrésére szolgál.
DML: Adatmódosító nyelv Adatatlekérdezés, összesítő függvények 9. Mennyi a cikkek összértéke? SUM(oszlopnév) összeg (csak szám) AVG(oszlopnév) átlag (csak szám) MIN(oszlopnév) minimum érték MAX(oszlopnév) maximum érték COUNT(*) sorok száma COUNT(oszlopnév) nem null cellák darabszáma Egy lekérdezésben több összesítő függvényt is alkalmazhatunk, az összesítő függvényekkel műveleteket is végezhetünk, de alaphelyzetben (csoportosítás nélkül) más oszlopokat nem jeleníthetünk meg SELECT SUM(EgysegAr) AS összérték FROM Cikk;
DML: Adatmódosító nyelv Adatatlekérdezés, összesítő függvények 10. Mennyi az 5000 és 10000Ft közötti cikkek összértéke? SELECT SUM(EgysegAr) AS összérték FROM dbo.Cikk WHERE (EgysegAr BETWEEN 5000 AND 10000)
DML: Adatmódosító nyelv Adatatlekérdezés, összesítő függvények 11. Hány cikkünk van és mennyibe kerül a legolcsóbb és a legdrágább cikk? SELECT COUNT(*) AS db, MIN(EgysegAr) AS legolcsóbb, MAX(EgysegAr) AS legdrágább FROM Cikk
DML: Adatmódosító nyelv Adatatlekérdezés, összesítő függvények 12. Hány különböző nevű cikkünk van? MIN(distinct oszlopnév) minimum érték MAX(distinct oszlopnév) maximum érték COUNT(distinct oszlopnév) nem null különböző cellák SELECT COUNT(DISTINCT Cikknev) AS db FROM Cikk
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 13. Az egyes számlákon milyen cikkeket vettek? Számlaszám szerint rendezve kívánjuk megjeleníteni a számlaszámot és a cikkszámot és a cikknevet. Két táblát kell használnunk.
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 13. Az egyes számlákon milyen cikkeket vettek? View segítségével: SQL segítségével: SELECT SzamlaSzam, Cikknev, Cikk.Cikkszam FROM Cikk INNER JOIN SzamlaTetel ON Cikk.Cikkszam = SzamlaTetel.Cikkszam ORDER BY SzamlaSzam Az INNER JOIN: csak az illezkedő rekordokat jeleníti meg VAGY SELECT SzamlaSzam, Cikknev, Cikk.Cikkszam FROM Cikk, SzamlaTetel Where Cikk.Cikkszam = SzamlaTetel.Cikkszam ORDER BY SzamlaSzam
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata SQL segítségével: SELECT SzamlaSzam, Cikknev, Cikk.Cikkszam FROM Cikk LEFT OUTER JOIN SzamlaTetel ON Cikk.Cikkszam = SzamlaTetel.Cikkszam ORDER BY SzamlaSzam Az LEFT OUTER JOIN: a CIKK tábla összes rekordja és a Számlatétel illeszkedő értékei jellennek meg Az RIGHT OUTER JOIN: a Számlatétel tábla összes rekordja és a CIKK illeszkedő értékei jellennek meg SELECT SzamlaSzam, Cikknev, Cikk.Cikkszam FROM Cikk RIGHT OUTER JOIN SzamlaTetel ON Cikk.Cikkszam = SzamlaTetel.Cikkszam ORDER BY SzamlaSzam
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 14. A budapesti partnereink milyen cikkeket vettek? View segítségével: SELECT PartNev, Cikk.Cikkszam, Cikknev FROM Szamla, Partner, SzamlaTetel, Cikk WHERE Szamla.PartAzon = Partner.PartAzon and Szamla.SzamlaSzam = SzamlaTetel.SzamlaSzam and SzamlaTetel.Cikkszam = Cikk.Cikkszam and (dbo.Partner.Varos = 'Budapest')
DML: Adatmódosító nyelv Adatatlekérdezés, csoportosítás 15. Melyik cikkcsoportban van tíznél kevesebb cikk? View segítségével: SQL segítségével: SELECT COUNT(*) AS Expr1, Cikkcsoport FROM dbo.Cikk GROUP BY Cikkcsoport HAVING (COUNT(*) < 10) Az INNER JOIN: csak az illezkedő rekordokat jeleníti meg
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 16. Mennyi az egyes számlák végösszege? View segítségével: SQL segítségével: SELECT SzamlaSzam, Cikknev, Cikk.Cikkszam FROM Cikk INNER JOIN SzamlaTetel ON Cikk.Cikkszam = SzamlaTetel.Cikkszam ORDER BY SzamlaSzam Az INNER JOIN: csak az illezkedő rekordokat jeleníti meg
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 17. Mely számlákon szerepel kettőnél több cikk? View segítségével: SQL segítségével: SELECT SzamlaSzam, Cikknev, Cikk.Cikkszam FROM Cikk INNER JOIN SzamlaTetel ON Cikk.Cikkszam = SzamlaTetel.Cikkszam ORDER BY SzamlaSzam Az INNER JOIN: csak az illeszkedő rekordokat jeleníti meg
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 18. Melyik a legdrágább cikk? Select top 1 Cikkszam, cikknev From cikk order by egysegar desc Csökkenő sorrendbe rendezzük és csak az első értéket Jelenítjük meg. Megoldható a feladat belső selectel is: Select Cikkszam, cikknev From cikk where egysegar = (Select max(egysegar) from cikk)
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 19. Mely cikkekből nem vásároltak? SELECT Cikknev, cikkszam FROM Cikk Where cikkszam not in (Select cikkszam from szamlatetel)
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 20. Mely partner vásárolt az átlagosnál többért a tárgyévben? (A megoldást két részre bontjuk) Select Partnev, sum(menny*egysegar*(1+AFAErtek)) as Ft From szamlatetel, szamla, partner Where partner.partazon= szamla.partazon and szamla.szamlaszam=szamlatetel.szamlaszam Group by partner.partazon, partnev Elmentjük a lekérdezést 20a néven Select Partnev, Ft From [20a] Where Ft >(Select AVG(Ft) from [20a]) Megjegyzés: mivel szabályosan a táblaneveknek betűvel kell kezdődni, a szögletes zárójellel jelezzük, hogy a 20a táblanév
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 21. Hány partner neve szerepel az ábécé egyes betűivel? (Az oszlopnevekben függvényeket is használhatunk) Select Left(Partnev,1) as betű, count(*) as db From Partner Group by Left(Partnev,1);
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 22. Cikkcsoportonként melyik termék a legolcsóbb? Select cikkcsoport, cikknev, cikkszam, egysegar From cikk C1 Where egysegar = (Select min(egysegar) from cikk C2 where C1. cikkcsoport=C2.cikkcsoport) A belső select hivatkozik a külső selectben lévő táblára, ezért minden sorra külön kiértékelődik. Minden sornál az aktuális cikkcsoport legolcsóbb árát adja a belső select.
DML: Adatmódosító nyelv 23. Emeljük meg a “COAT” cikkcsoportban levő cikkek árát 10%-kal! UPDATE Cikk SET EgysegAr = EgysegAr*1.1 WHERE Cikkcsoport='COAT'; 24. Mentsük ki a budapesti partnereinket egy külön táblába! SELECT Partner.* INTO bud FROM Partner WHERE Varos='budapest'; 25. Tegyük ki egri partnereinket is ebbe a táblába! INSERT INTO bud (partnev, irszam, Varos, UtcaHsz, Tel1, Tel2) SELECT partnev, irszam, Varos, UtcaHsz, Tel1, Tel2 FROM Partner WHERE Varos='eger';
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 26. Mely partnerek fizettek “készpénz”-zel is és “átutalás”-sal is? Select distinct Partnev from partner, szamla where partner.partazon in (Select partazon from szamla where FizmAzon=1) and partner.partazon=Szamla.partazon and FizmAzon=2;
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 27. Mely partnerek fizettek csak 1-es fizetési móddal (készpénz)? Select distinct Partnev from partner, szamla where partner.partazon not in (Select partazon from szamla where FizmAzon<>1) and partner.partazon=Szamla.partazon and FizmAzon=1;
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 28. Mely partnerek vásároltak csupán egyszer? Select PartNev, COUNT(*) as vásárolt from partner, szamla where partner.partazon=Szamla.partazon Group by Partner.partazon, PartNev Having Count(*) = 1;
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 29. Melyik partner nem vásárolt az 2000.06.01 óta semmit? Select PartNev from partner where partazon not in (Select partazon from szamla Where SzlaDat > '2000-06-01')
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata Integer, money, real, float Select m_szám, round(óraszám,0)*óradíj as összeg from munka
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata SELECT neve, név, m1.óraszám FROM munka AS m1 INNER JOIN megrendelõ ON m1.megrendelõ = dbo.megrendelõ.azonosító INNER JOIN dolgozó ON m1.vezetõ = dolgozó.kód WHERE m1.óraszám = (SELECT MAX(óraszám) FROM dbo.munka AS m2 WHERE m1.vezetõ = m2.vezetõ)
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 21 SELECT sum(óraszám), count(*) FROM munka, dolgozó, csoport WHERE dolgozó.kód=vezetõ and neve='Nagy Péter' and munka.m_szám=csoport.m_szám
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 22 SELECT top 1 neve, név, convert(VARCHAR(25),ind_kelt,102) from csoport, dolgozó, munka, megrendelõ where dolgozó.kód=csoport.kód and csoport.m_szám=munka.m_szám and megrendelõ=azonosító and belép_éve=(Select min(belép_éve) from dolgozó) order by ind_kelt
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata SELECT top 1 NÉV,ind_kelt From munka m1, megrendelõ where megrendelõ=azonosító and ind_kelt=(Select max(ind_kelt) from munka m2 where m1.megrendelõ=m2.megrendelõ) order by ind_kelt 23 24 SELECT d1.neve, d2.neve, cs1.m_szám From dolgozó d1, dolgozó d2, csoport cs1, csoport cs2 Where d1.kód=cs1.kód and d2.kód=cs2.kód and cs1.m_szám=cs2.m_szám and d1.kód < d2.kód Order by d1.neve, d2.neve
DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 25 select d1.neve as dolgozó, d2.neve as nem_fõnöke from dolgozó d1, dolgozó d2 where d2.kód not in (Select vezetõ from munka, csoport where munka.m_szám=csoport.m_szám and d1.kód=csoport.kód) and d1.kód<>d2.kód;
DCL: Adatvezérlő nyelv Tárolt eljárás CREATE PROCEDURE proba_SP AS BEGIN SELECT * FROM Partner END Exec proba_SP CREATE PROCEDURE beszur_sp (@p1 char(60), @p2 char(5), @p3 char(30)) AS BEGIN insert into partner (PartNev, Irszam, Varos) values (@p1, @p2, @p3) select * from partner END Exec beszur_sp 'Kis Péter', '6800', 'Hódmezõvásárhely'
DCL: Adatvezérlő nyelv Tárolt eljárás CREATE PROCEDURE ha_sp (@p1 char(60), @p2 char(5), @p3 char(30)) AS BEGIN if not exists (Select * from partner where Partnev = @p1) insert into partner (PartNev, Irszam, Varos) values (@p1, @p2, @p3) print'bejegyezve' END else print 'Már létezik' Exec beszur_sp 'Kiss Péter', '6800', 'Hódmezõvásárhely'
DCL: Adatvezérlő nyelv Tárolt eljárás CREATE PROCEDURE ciklus AS BEGIN declare @x int select @x=1 while @x<5 begin print 'Az x még mindig kisebb ötnél' select @x=@x+1 end END Exec ciklus
DCL: Adatvezérlő nyelv Triggerek Triggereket általában az alkalmazás sajátosságaiból fakadó szabályosságok beépítésére alkalmazunk. Triggereket akkor is használunk, ha a kívánt megszorításokat a dekleratív eszközeinkel nem tudjuk megvalósítani. A triggerek a szabályok és az egyéb hivatkozási ellenőrzések után futnak le, ezért ha ezek nem teljesülnek, akkor végre sem hajtódik. Amennyiben a trigger hibás, nem fut le, a művelet sem kerül végrehajtásra. CREATE TRIGGER trigger neve ON tábla név FOR {INSERT, UPDATE, DELETE} [WIDTH ENCIPTRION] As sql utasítások
DCL: Adatvezérlő nyelv Triggerek Új táblát hozunk létre (logol) Új triggert hozunk létre CREATE TRIGGER log ON Partner FOR INSERT, UPDATE As insert into logol VALUES (getdate(), Host_name(), suser_name()) Módosítunk a partner táblán és a bejegyzés magától létrejön
DCL: Adatvezérlő nyelv Triggerek Triggerekkel megakadájozhatjuk egy művelet végrehajtását is. Műveletvégzéskor az inserted ill. a deleted tábla visszavonható módon tartalmazza az elvégzésre váró művelet rekordjait
DCL: Adatvezérlő nyelv Triggerek Delete triggereket általában akkor használjuk, ha egy rekord törlésekor más rekordokat is törölni kell vagy ha a törlés hivatkozási integritást sért. CREATE TRIGGER cikktorles ON Cikk FOR delete As Declare @torol char(8) Select @torol=cikkcsoport from deleted IF @torol = 'COAT' begin ROLLBACK TRAN RAISERROR ('Nem törölhetõ, mert COAT',16,10) end