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

Zasto ne valja ovaj trigger i trebali za ovako nesto triger?

[es] :: MS SQL :: Zasto ne valja ovaj trigger i trebali za ovako nesto triger?

[ Pregleda: 4430 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

avox
Beograd@Srbija

Član broj: 34116
Poruke: 81
*.adsl-4.sezampro.yu.

Sajt: www.tursija.com


Profil

icon Zasto ne valja ovaj trigger i trebali za ovako nesto triger?21.01.2008. u 13:46 - pre 197 meseci
Pozdrav!!!
Radim neki program koji mi treba da bi prosao kolokvijum. Program radim u c#2005 sa sql 2005 express.
Treba mi triger koji ce iz tabele robaUsluga izeti cenu i pomnoziti je sa kolicinom robe koja je uzte a koja se nalazi u tabeli stavke. I dobijenim rezultatom osveziti kolonu Ukupno u tabeli racun. Trigger mi prodje debug ali kada probam da ga izvrsavam program pukne.
Posto sam pocetnik nisam ni siguran da li mi za ovako neto treba privremena tabela... Triger sam napravio na tabeli stavke.


Evo moje baze.

Evo i triggera koji sam napisao.
Code:

ALTER TRIGGER Trigger1 
ON dbo.Stavke 
FOR INSERT
AS
create table #privremena
(
racunID int,
ukupno smallmoney,
robaUslugeID int
)

insert into #privremena
select i.racunID
from Inserted i

update #privremena
set ukupno = (SELECT r.cenaPoKomadu * i.kolicina
from [robaUsluge] r
inner join Inserted i
on
r.[robaUslugeID] = i.[robaUslugeID])

update r
set ukupno = (SELECT ukupno + p.ukupno
from [Racun] r
inner join [#privremena] p
on
r.[racunID]=p.[racunID])




[Ovu poruku je menjao avox dana 21.01.2008. u 20:48 GMT+1]
 
Odgovor na temu

Koce
DBA
Serbia, Belgrade

Član broj: 59217
Poruke: 144
*.vektor.net.



+1 Profil

icon Re: Zasto ne valja ovaj trigger21.01.2008. u 15:27 - pre 197 meseci
Kod mene je ovo proslo bez problema:


alter trigger tr_triger
on stavka
for insert, update
as

create table #t (iznos float, racunid int)
insert into #t (iznos, racunid)
select robaUsluga.cenaPoKomadu * inserted.kolicina, inserted.racunid
from robaUsluga inner join inserted
on robaUsluga.[robaUslugeID] = inserted.[robaUslugeID]


update racun
set ukupno = i.iznos
from racun r, #t i
where r.racunID = i.racunID

drop table #t

probaj
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Zasto ne valja ovaj trigger21.01.2008. u 19:08 - pre 197 meseci
neces poloziti kolokvijum :-(
Ceo problem je kako uraditi UPADTE na koloni Ukupno u tabeli Racun. Ta kolona ne treba uopste da postoji, ukupno za racun se uvek moze izracunati kad tio zatreba. Prema tome, ukloni tu kolonu iz tabele i koristi najjednostavniji SELECT da izracunas ukupan iznos racuna akd ti zatreba. Time nestaje tvoj problem. Nemoj mi reci da to mora ovako, kao 'rekao asistent'. ne treba ti da naucis nesto pogresno. Ostace ti to tako do kraja zivota. To ti n treba u karijeri

:-)
 
Odgovor na temu

avox
Beograd@Srbija

Član broj: 34116
Poruke: 81
*.adsl-4.sezampro.yu.

Sajt: www.tursija.com


Profil

icon Re: Zasto ne valja ovaj trigger21.01.2008. u 19:43 - pre 197 meseci
Bi osam kod asistenta danas i rekao je da za ovo ne koristim trigger nego i da bi bilo dobro da u tabelu racun stavim klonu Test koja je bit. Kada je bit=1 tada mogu da se u racun dodaju stavke , a kada je bit=0 tada ne mogu. Takodje je rekao da se u bazu nista ne upisuje sve dok je bit=1. Za kolokvijum nemam oderedjenu temu niti nacin na koji to da uradim. Trazi na program pisan u c# koji ima najmanje 4 tabele. Hvala puno na pomoci. Izbacicu Ukupno.
Sta mislis o ovome sto mi je preporucio asistent?
 
Odgovor na temu

M E N E
borislav
Temerin

Član broj: 30434
Poruke: 231
*.nspoint.net.



+1 Profil

icon Re: Zasto ne valja ovaj trigger i trebali za ovako nesto triger?22.01.2008. u 07:42 - pre 197 meseci
Otprilike...
(necu govoriti po imenima tvojih tabela, ali ti ih prepoznaj)
Zaglavlje robnog dokumenta se jednom formira, a na njega se kace stavke (kojih moze biti vise, naravno)
U Zaglavlje dokumenta imas polje statusa... dok je polje statusa OTVORENO, mozes dodavati stavke, kad se jednom prebaci na ZATVORENO, nema vise vracanja na OTVORENO, jedino moze ici na STORNIRANO (dakle, ne moze niko da ti cacka po otpremnici, kad je roba vec otisla, moze samo da se stornira, ako dodje do povrata robe). Kako ces napraviti polje statusa, resis sam
U Artiklima imas cenapokomadu i imas kolicina (verovatno trenutno stanje zaliha). To bi trebalo izdvojiti. Napravi posebnu tabelu Magacin, ili Zalihe, ili kako god hoces (sad se to moze siriti na znacajno preko 4 tabele), gde ces imati artikle i kolicine.
Pitanja kolicina (smanjivanje, kad se nesto proda), racuna (sumiranje) i sl, resi iz stored procedura, a ne iz triggera

To ti je moj savet, a bice i drugacijih :-)
Uhvatili ste me nespremnog
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Zasto ne valja ovaj trigger i trebali za ovako nesto triger?22.01.2008. u 16:49 - pre 197 meseci
@ avox:
Sad kazes ovako
Citat:
Bi osam kod asistenta danas i rekao je da za ovo ne koristim trigger nego i da bi bilo dobro da u tabelu racun stavim klonu Test koja je bit. Kada je bit=1 tada mogu da se u racun dodaju stavke , a kada je bit=0 tada ne mogu.

A poceo si pitanjem zasto ne radi triger
Citat:
koji ce iz tabele robaUsluga izeti cenu i pomnoziti je sa kolicinom robe koja je uzte a koja se nalazi u tabeli stavke. I dobijenim rezultatom osveziti kolonu Ukupno u tabeli racun.

To sto ti je asistent rekao i ono sto si pitao nem veze jedno s drugim. Asistent te je lepo savetovao kako da 'zakljucas' racun. Medjutim, tvoje pitanje je bilo nesto drugo - kako da pri unosu svakog artikla u racun azuriras novcani zbir za racun.

Poslusaj asistenta za zakljucavanje, a za azuriranje zbira poslusaj mene - dropni polje Zbir iz tabele racun i zaboravi na celu pricu, nikakav triger ti za to ne treba. Kad ti bude trebalo da prikazes zbir, odradis SELECT kveri za taj racun i eto ti zbira. Mozes da napravis stored proceduru ili funkciju kojoj saljes BrojRacuna kao parametar, a dobijes nazad SUM(cena*kolicina).

Za zakljucavanje ti treba triger, na tabeli Stavke, koji proverava da li je Racun zakljucan i ako jeste ponistava transakciju.

Otprilike ovako:
Code:

CREATE TRIGGER [dbo].[Stavke_ZakljucanRacun] ON [dbo].[Stavke] 
FOR UPDATE, DELETE 
AS
----- Svrha: sprecava Updates and Deletes u tabeli Stavke ako je roditelj tabela Racuni zakljucana (Racun.Test=1)

IF EXISTS (SELECT * 
                FROM deleted AS D -- ovde se nalaze redovi koje pokusavas da promenis ili obrises
                JOIN Racuni AS R ON R.racunID=D.racunID -- a ovde je njihov racun
                 WHERE R.test=1 --- i ako racun ima Test=1 onda se zabranjuju izmene
                )
    begin
        raiserror ('Racun je zakljucan (Test=1) pa brisanje ili izmena stavki nije dozvoljena :-)',16,1)
        ROLLBACK  --- ovo ponistava sve promene pokusane u ovoj transakciji (update/delete)
    end


 
Odgovor na temu

avox
Beograd@Srbija

Član broj: 34116
Poruke: 81
*.adsl-4.sezampro.yu.

Sajt: www.tursija.com


Profil

icon Re: Zasto ne valja ovaj trigger i trebali za ovako nesto triger?22.01.2008. u 18:07 - pre 197 meseci
Prvo sam postavio pitanje, a posle sam isao isao kod asistenta, koji mi je rekao sta da ispravim.Ali posto je njegov predmet c# nije zalazio u detalje oko baze. :-)
Bacam se na posao.

Hvala!
 
Odgovor na temu

avox
Beograd@Srbija

Član broj: 34116
Poruke: 81
*.adsl-1.sezampro.yu.

Sajt: www.tursija.com


Profil

icon Re: Zasto ne valja ovaj trigger i trebali za ovako nesto triger?28.01.2008. u 21:01 - pre 197 meseci
Sve radi. Poslusao sam zidara i asistenta. Naisao sam na novi problem. Sta se desava kada se cene promene, a meni treba Cena nekog racuna od pre 3 meseca. On ce mi tada izracunati cenu sa novim cenama iz tabele Roba. Takodje sam u tabelu kupac stavio popust i isto se desi kada se promeni popust kod nekog kupca.

[Ovu poruku je menjao avox dana 28.01.2008. u 22:37 GMT+1]
 
Odgovor na temu

aleksandarpopov
IT consultant
Senta

Član broj: 57172
Poruke: 484
77.46.155.*

Sajt: www.linkedin.com/in/aleks..


Profil

icon Re: Zasto ne valja ovaj trigger i trebali za ovako nesto triger?28.01.2008. u 21:17 - pre 197 meseci
U tabelu Stavke dodas kolone ProdCena - cenu po kojoj si prodao i kolonu ProcenatPopusta - popust u % koji si eventualno dao kupcu.
RTFM
 
Odgovor na temu

avox
Beograd@Srbija

Član broj: 34116
Poruke: 81
*.adsl-1.sezampro.yu.

Sajt: www.tursija.com


Profil

icon Re: Zasto ne valja ovaj trigger i trebali za ovako nesto triger?19.02.2008. u 16:20 - pre 196 meseci
Hvala puno. Program sam predao ovakav kakav je. Nije bilo problema, polozio sam :-)
Posto sam nameravao jos malo da se zezam sa ovim mojim programom, ubacicu jos te 2 kolone u tabelu.
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Zasto ne valja ovaj trigger i trebali za ovako nesto triger?20.02.2008. u 14:48 - pre 196 meseci
Cestitam na polozenom ispitu
Citat:
Prvo sam postavio pitanje, a posle sam isao isao kod asistenta, koji mi je rekao sta da ispravim.Ali posto je njegov predmet c# nije zalazio u detalje oko baze.


Jedna od najjezivijih stvari koje se danas desavaju u IT biznisu jeste recenica "Ali posto je njegov predmet c# nije zalazio u detalje oko baze."
Na taj nacin dobijamo izvanredne programere, koji izvanredno programiraju, ali ne razumeju bas mnogo sta se desava u bazi i oko baze. Rezultat: mnogo nepotrebnog programiranja, koje na kraju ne daje ocekivane rezultate. Ali je zato kod elegantan. I objektno orjentisan

Pazi da ne upadnes u tu zamku.

Srecan rad
 
Odgovor na temu

[es] :: MS SQL :: Zasto ne valja ovaj trigger i trebali za ovako nesto triger?

[ Pregleda: 4430 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

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