Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Da li se ovaj problem resava trigerom?

[es] :: MS SQL :: Da li se ovaj problem resava trigerom?

[ Pregleda: 3474 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

tanjakg81
Tanja Radovic
Kragujevac

Član broj: 77560
Poruke: 37
*.verat.net.



Profil

icon Da li se ovaj problem resava trigerom?04.06.2006. u 16:22 - pre 217 meseci
Imam tri tabele,Fakture, Izvodi i Nalog. Izmedju ostalih tabele Fakture i Izvodi mi sadrze i polje "proknjizeno" koje je po default-u 0.Htela bih da kad se u tabeli Nalog unesu odgovarajuce vrednosti iz tabela Fakture ili Izvodi, vrednost polja "proknjizeno" dobije vrednost 1?
Apsolutni sam pocetnik u radu sa SQL Serverom, pa ako bi neko imao volje i vremena da mi odgovori da li se ovaj problem resava trigerom i da me uputi kako to da izvedem bila bih mu veoma zahvalna?
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.qc.sympatico.ca.



+79 Profil

icon Re: Da li se ovaj problem resava trigerom?04.06.2006. u 17:39 - pre 217 meseci
Izgleda da ti ne treba trigger, a ni polje "proknjizeno". Iz onog sto si opisala sledi da
proknjizeno postaje = 1 kad se izvod/faktura unese u tabelu Nalog. Uvek mozes da napise kveri (view) koji ce da pogleda u tabelu NAlog i ako tamo potrazi vrednosti iz Faktura/Izvod. Ako su vrednosti nadjene, onda view vrati vrednost "Proknjizeno", u suporotnon vrati "NIJE proknjizeno"

Ako nam das vise detalja (tacnu strukturu tabela, PK, FK) onda mozemo da ti pokazemo i kveri koji to radi, a ako bas insistiras mozemo i trigger da ti pokazemo.

:-)
 
Odgovor na temu

tanjakg81
Tanja Radovic
Kragujevac

Član broj: 77560
Poruke: 37
*.verat.net.



Profil

icon Re: Da li se ovaj problem resava trigerom?04.06.2006. u 18:03 - pre 217 meseci
Pa da, ako zelim "neproknjizene" fakture/izvode mogu ih dobiti sa MINUS jel' da?
Nesto kao :

SELECT * FROM Fakture
MINUS
SELECT * FROM Nalog

Moj zadatak je da napravim bar jedan triger nad svojom bazom koja sadrzi tabele Partneri, Fakture, Izvodi, Nalog i sl.
Htela bih da probam sama, ali je problem sto ne znam bas puno o trigerima!
Dajte mi za pocetak neki savet, kako bi se i gde mogao korisiti nad ovakvim tabelama triger,pa ako ne uspem da isteram sama do kraja moracu da vam posaljem svoju strukturu tabela.

Hvala!
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.eqao.com.



+79 Profil

icon Re: Da li se ovaj problem resava trigerom?05.06.2006. u 14:28 - pre 217 meseci
Tako nekako u principu, 'izlistaj sve iz tabele A koji se ne nalaze u tabeli B'. Ne znam da li MS SQL pordzava MINUS (verzija 2005?), ali uvek moze LEFT OUTTER JOIN.

Sto se trigera tice, oni se dodaljuju tabeli i aktiviraju se na jedan od dogadjaja INSERT, DELETE ili UPDATE.
U momentu nekog od dogadjaja, SQL server interno kreira dve temp table, zovu se inserted i deleted
Struktura tabela 'inserted' i 'deleted' je identicna strukturi tabele nad kojon se vrsi operacija. U 'deleted' se cuva ceo red, onakav kakv je bio pre operacije. U 'inserted' se cuva novo stanje. Na primer, imas tabelu
Ucenici (Ime varchar(25), Prezime varchar(25), maticniBroj int) i pisalo je

'Goran','Pterovic',12345

Sad ti hoces da 'Pterovic' postane 'Petrovic' i kazes

UPDATE Ucenici
SET prezime='Petrovic'
WHERE MaticniBroj=12345

imaces sledecu situaciju u tabelama 'inserted' i 'deleted'
Inserted: 'Goran','Petrovic',12345
Deleted: 'Goran','Pterovic', 12345

Trigger se desava kao u nekom medjuvremenu, jos nije nista stvarno obrisano niti insertovano, trigger u tom momemntu moe da radi sta hoce. Hoces na primer stare podatke da posaljes negde drugde, u neku drugu tabelu. Recimo da ima stabelu Ucenici_StaroStanje (Ime, prezime, MaticniBroj, VremePromene) koja cuva sve podatke koji su bili pre UPDATE. Trigger bi uradio ovo:


INSERT INTO Ucenici_StaroStanje
SELECT Ime, prezime, MaticniBroj, GetDate()
FROM Inserted

U tvom slucaju bi bilo nesto kao 'U tabeli Fakture, upisi u polje Proknjizeno vrednost 1 kad se u tabelu Nalog unese novi red, za neku fakturu'

Onda ces na tabeli Nalog da napravis trigger (jer se tamo desava promena) koji ce da u tabelu Fakture u odgovarajuci rekord upise vrednost 1. Pretpostavimo da tabele izgledaju nekako ovako:

Fakture (BrojFakture int Primatry Key, , Datum datetime NOT NULL, Proknjizeo Int)
Nalog (Brnaloga int Primary Key NOT NULL, DatumNaloga datetime NOT NULL, BrojFakture int NOT NULL)

Trigger na tabeli Nalog treba da uradi ovo, na dogadjaje INSERT:

UPDATE Fakture
SET Proknjizeno=1
WHERE BrojFakture = (SELECT BrojFakture FROM Inserted)

Dakle, kad kreiras novi nalog, unses BrojFakture, u momentu kad se novi red INSERTuje u tabelu Nalog, trigger uradi Update na tabeli Fakture.

Za sintaksu triggera, vidi knjige.

:-)






 
Odgovor na temu

tanjakg81
Tanja Radovic
Kragujevac

Član broj: 77560
Poruke: 37
*.verat.net.



Profil

icon Re: Da li se ovaj problem resava trigerom?05.06.2006. u 16:57 - pre 217 meseci
Hvala Zidar!
Gledala sam primere iz Help-a,pa sam dobila ideju da uradim nesto ovako:
Code:

CREATE TRIGGER trProveriVreme
ON Fakture FOR INSERT,UPDATE AS
DECLARE @datum1 datetime, @datum2 datetime
SELECT  @datum1 = DatumValute from inserted

SELECT  @datum2 = DPO from inserted

IF (@datum1 > @datum2) BEGIN
    PRINT 'Datum roka placanja nije korektan!'
    ROLLBACK TRAN
    RETURN
END


Gde je DatumValute, datum kad faktura stize, a DPO do kad mora da se plati.
Jel' bi mogao ovo da bude triger?
Kad sam izvrsila ovaj upit nije bilo greske, medjutim kad sam probala sa INSERT da ubacim slog,on mi javlja sintaksnu gresku oko datuma,a unosila sam nesto ovako:INSERT(2.03.2006),i ono javlja nesto oko ".2006",jel problem oko formata za datum ili mislis da je nesto drugo?
Jos nesto,ono polje "proknjizeno" sam htela da izbacim sa:
ALTER TABLE Fakture
DROP COLUMN Proknjizeno bit NOT NULL;
I,nije mi dozvolio zbog definisanog DEFAULT-a, pa sam probala sa:
ALTER TABLE Fakture
ALTER COLUMN Proknjizeno bit NOT NULL DROP CONSTRAINT [DF_Fakture_Proknjizeno];
Medjutim i to nije u redu...Sta treba da ispravim?

Pozdrav




Nasla sam gresku!


Datum mora sa crtom izmedju, 2-5-2006, ali mi nije jasno sto mi ne prihvata taj datum nego neki bezveze,1.7.1894?
Verovatno nesto treba da se podesi?Ali,sta?



[Ovu poruku je menjao tanjakg81 dana 05.06.2006. u 19:34 GMT+1]
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.eqao.com.



+79 Profil

icon Re: Da li se ovaj problem resava trigerom?06.06.2006. u 15:54 - pre 217 meseci
Trigger radi. Bravo U ptravom zivotu izbegavas trigere i sve resis na nivou nekakvih CONSTRAINTS (CHECK, FOREIGN KEY, UNIQUE). Naravno, ponekad bas mora trigger. Za skolsku upotrebu, ovo sto si uradila je sasvim OK. A usut si stekla iskustvo sa datumima

Prikaz i unos datuma zavisi od setvanja servera, ali tu ne mogu da ti pomognem jer to ne umem da uradim. Ali, sad bar znas kako mora, pa ce vec nekkao ici.

Sto se tice izbacivanja kolone, nemoj da ises kroz DDL (Data Definition Language). Idi u Enterprise Manager, otvori tabelu u Design i jednostavno obrisi kolonu.

Srecan rad

 
Odgovor na temu

tanjakg81
Tanja Radovic
Kragujevac

Član broj: 77560
Poruke: 37
*.verat.net.



Profil

icon Re: Da li se ovaj problem resava trigerom?06.06.2006. u 20:57 - pre 217 meseci
Ma resila sam i ovo sa datumom, mada slucajno, probaj ovo probaj ono...
Mada ne razumem logiku da ako unosim na primer INSERT(2-3-2006) on to prihvati kao sasvim neki drugi datum, neka 1894-ta, a ako stavim INSERT('2-3-2006'), on to prihvati OK? Zar navodnici nisu samo za stringove?Ili on ovde vrsi konverziju datuma u string?, mada zasto bi?
Moram da radim preko DDL-a, bas zato sto je za skolu, ali nesto cu da izvrdam oko tog brisanja, bar dok ne naucim!

:-)
 
Odgovor na temu

burner
Dragiša Rakić
BG

Član broj: 898
Poruke: 150
*.ADSL.neobee.net.



+1 Profil

icon Re: Da li se ovaj problem resava trigerom?06.06.2006. u 23:26 - pre 217 meseci
SQL server i datumi :) Prema nekom mom iskustvu, datum se sigurno korektno unosi ukoliko se napiše u formatu YYYY-MM-DD. U Enterprise Manageru može da prođe i DD.MM.YYYY ukoliko je Locale settings Serbian Latin ili neki sličan. Postoji i praksa da se u klijentskoj aplikaciji datum konvertuje u integer a zatim taj integer upiše u datumsko polje i onda je opet sve korektno...
 
Odgovor na temu

[es] :: MS SQL :: Da li se ovaj problem resava trigerom?

[ Pregleda: 3474 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.