06 2010 05 19





--TRIGGERY


--SKLADNIA TWORZENIA TRIGGERA

create trigger nazwa
on nazwa tabeli
for after lub instead create update delete
as begin
CIAŁO TRIGGERA
end

create trigger tr_dzialy on dzialy
for insert, update, delete
as
begin
select * from dzialy
end

insert into dzialy(nazwa) values('Nowy')






















--TABELE INSERTED I DELETED


alter trigger tr_dzialy
on dzialy
for insert, update, delete
as
begin
select * from inserted
select * from deleted
end

-- Tabela INSERTED przy dodawaniu

insert into dzialy(nazwa) values('Nowy Inserted')

-- Tabela DELETED przy usuwaniu

delete from dzialy where nazwa = 'Nowy Inserted'

--Tabele INSERTED I DELETED przy modyfikacji

insert into dzialy(nazwa) values('Nowy Updated')
update dzialy set aktualny = 'nie'
where nazwa = 'Nowy Updated'


alter table dzialy add aktualny varchar(3)
update dzialy set aktualny='tak'

--Wpływ wycofania transakcji na działanie triggera
--transakcja

alter trigger tr_dzialy1
on dzialy
for insert, update, delete
as
begin
--select * from dzialy
rollback
end

delete from dzialy where dzialid > 4

--

alter trigger tr_dzialy
on dzialy
for insert, update, delete
as
begin
if update(aktualny)
print 'Zmiana aktualności'
else
print'Aktualność nie zmieniana'
print columns_updated()
--funkcja sluzy do sprawdzenia ktora kolumna byla zmieniana
end

update dzialy set nazwa = 'nowa nazwa',aktualny ='tak'
where dzialid =8

update dzialy set aktualny = 'nie' where dzialid > 5

--TRIGGERY INSTEAD OF - czyli zamiast akcji

alter table zarobki add aktualny varchar(3)

create trigger tr_zarobki
on zarobki
instead of delete
as
begin
update zarobki set aktualny='nie'
where zarid in (select zarid from deleted)
end



--sprawdzamy zarobiek o id = 4
select * from zarobki

--próbujemy usunac zarobiek o id = 4
delete from zarobki where zarid=4

--sprawdzamy zarobiek o id = 4
select * from zarobki

--TRIGGERY AUDYTOWE

--uzupełniamy tabele osoby o pola audytowe

alter table pracownicy add
data_wst datetime,
operator_wst varchar(30),
data_mod datetime,
operator_mod varchar(30)


create trigger tr_prac on pracownicy
for update, insert
as
begin

if exists (select * from deleted)
update pracownicy set data_mod = getdate(),
operator_mod=user
where pracid in (select pracid from inserted)
else
update pracownicy set data_wst = getdate(),
operator_wst=user
where pracid in (select pracid from inserted)
end

--testujemy trigger


insert into pracownicy (nazwisko) values ('NAZ_TESTOWE')

select * from pracownicy where nazwisko = 'NAZ_TESTOWE'

update pracownicy set imie = 'IMIE_TEST' where nazwisko
= 'NAZ_TESTOWE'

select * from pracownicy where nazwisko = 'NAZ_TESTOWE'

--ZADANIE NA PLUSA

--stwórz triggera który przenosi dane dotyczące zarobków
--do tabeli historycznej będącej dokładną kopią tabeli
--zarobki bez kolumny aktualny.
--Uwzględnij w tej tabeli datę
--przenosin oraz użytkownika który kasował dane

create table zapasowa(zarid int, od datetime,
brutto money, pracid int, dataprzeniesienia datetime,
kto varchar(30));


create trigger kopia on zarobki
for delete
as
begin
insert into zapasowa(zarid, od, brutto, pracid,
dataprzeniesienia, kto)
(select zarid, od, brutto, pracid, getdate(),
user from deleted);
end
go

select * from zarobki;
insert into zarobki (od, brutto, pracid) values (getdate(), 123455, 14);
delete from zarobki where pracid=14;
select * from zapasowa;



----------
--kursory
----------
declare cr_pracownicy1 cursor for
select imie ,nazwisko from pracownicy


declare @nazw varchar(50)
declare @imie varchar(50)

open cr_pracownicy1

fetch next from cr_pracownicy1 into @nazw, @imie

while @@fetch_status = 0
begin
print @nazw+' '+@imie
fetch next from cr_pracownicy1 into @nazw, @imie
end

close cr_pracownicy1
deallocate cr_pracownicy1
---
declare cr_pracownicy cursor scroll FOR select imie ,nazwisko from pracownicy

declare @nazw varchar(50)
declare @imie varchar(50)

open cr_pracownicy

fetch last from cr_pracownicy into @nazw, @imie

while @@fetch_status = 0
begin
print @nazw+' '+@imie
fetch relative -2 from cr_pracownicy into @nazw, @imie
end

close cr_pracownicy
deallocate cr_pracownicy
*/



Wyszukiwarka

Podobne podstrony:
2010 05 Szkola konstruktorow kl Nieznany
Turystyka Zrównoważona SKRYPT (bez 05 19)
Adm 06 2010 z komentarzem
2010 05 On the Hedge
2010 05 04

więcej podobnych podstron