msSQL triger
norbert - 17-06-2007 00:17
msSQL triger
Witam
Mam do?? ciekawy problem a mianowicie:
Zalozylem na tabele kontrahent triggera i ten trigger ma by? wywo?ywany w momentcie dodania nowego kontrachenta. Ale......... tylko tego kontrhenta co ma wyró?nik 1 i teraz w takim przypadku ma to zapisac do tabeli historia. Fajnie jest bo to nawet dzi?a ale tylko wtedy gdy faktycznie kontrahent ma wyró?nik 1. W przypadku kontahenta który ma wyró?nik 0 to nawet faktycznie nie zadzia?? trigger tak jak ma to by? lecz gdy ponownie dodam kontrahenta z wyró?nikiem 1 to... do tabeli historia wpisuje mi kontrahenta z wyró?nikiem 1 jak i 0 . czemu tak si? dzieje? jak temu zaradzi? ?eby w tabeli historia byli zawsze tylko kontrachenci z wyró?nikiem 1
sg - 17-06-2007 00:17
norbert pisze: > Witam > > Mam do?? ciekawy problem a mianowicie: > > Zalozylem na tabele kontrahent triggera i ten trigger ma by? wywo?ywany > w momentcie dodania nowego kontrachenta. Ale......... > tylko tego kontrhenta co ma wyró?nik 1 > i teraz w takim przypadku ma to zapisac do tabeli historia. > Fajnie jest bo to nawet dzi?a ale tylko wtedy gdy faktycznie kontrahent > ma wyró?nik 1. > W przypadku kontahenta który ma wyró?nik 0 to nawet faktycznie nie > zadzia?? trigger tak jak ma to by? lecz gdy ponownie dodam kontrahenta z > wyró?nikiem 1 to... > do tabeli historia wpisuje mi kontrahenta z wyró?nikiem 1 jak i 0 . > czemu tak si? dzieje? jak temu zaradzi? ?eby w tabeli historia byli > zawsze tylko kontrachenci z wyró?nikiem 1
wystarczy napisa? odpowiedni trigger... a tak to nawet nie wiadomo jak Ci pomóc, mo?e kawa?ek tabeli, triggera czy czego? podobnego by? pokaza??
norbert - 17-06-2007 00:17
sg napisa?(a): > norbert pisze: >> Witam >> >> Mam do?? ciekawy problem a mianowicie: >> >> Zalozylem na tabele kontrahent triggera i ten trigger ma by? >> wywo?ywany w momentcie dodania nowego kontrachenta. Ale......... >> tylko tego kontrhenta co ma wyró?nik 1 >> i teraz w takim przypadku ma to zapisac do tabeli historia. >> Fajnie jest bo to nawet dzi?a ale tylko wtedy gdy faktycznie >> kontrahent ma wyró?nik 1. >> W przypadku kontahenta który ma wyró?nik 0 to nawet faktycznie nie >> zadzia?? trigger tak jak ma to by? lecz gdy ponownie dodam kontrahenta >> z wyró?nikiem 1 to... >> do tabeli historia wpisuje mi kontrahenta z wyró?nikiem 1 jak i 0 . >> czemu tak si? dzieje? jak temu zaradzi? ?eby w tabeli historia byli >> zawsze tylko kontrachenci z wyró?nikiem 1 > > wystarczy napisa? odpowiedni trigger... a tak to nawet nie wiadomo jak > Ci pomóc, mo?e kawa?ek tabeli, triggera czy czego? podobnego by? pokaza??
IF EXISTS ( SELECT name FROM sysobjects WHERE name = 'N_Trigger' AND type = 'TR' ) DROP TRIGGER N_Trigger GO
create trigger N_Trigger on kontrahent after insert
as declare @wyroznik1 int declare @stan_przed int declare @stan_po int select @wyroznik1 =(select wyroznik from inserted) if (@rejestracja =1) begin
SET @stan_przed = (select kasa from wplata where idkontrahenta =(select id_kontrahenta from inserted where wyroznik =1))
update wplata set kasa = dbo.N_ZamOdOdb(id_kontrahenta) where id_kontahenta =(select id_kontrahenta from inserted where wyroznik =1 )
SET @stan_po = (select kasa from wplata where idkontrahenta =(select id_kontrahenta from inserted where wyroznik =1))
INSERT INTO historia (data,stan_przed,stan_po) values (getdate(),@stan_przed,@stan_po)
end go
to wyglada dokladnie tak ze jesli wybiore kontahenta z wyroznikiem 1 to dopisze do tabeli historia wplaty a jesli dodam kontahenta z wyroznikiem 0 to nie doda ale jesli powtornie dodam kontrahenta z wyroznikiem 1 to stan_po jest suma dwoch ostatnich operacji. I to nie jest spowodowane tym ze jest wykonywany dwa razy update bo sprawdzalem
norbert - 17-06-2007 00:17
norbert napisa?(a): > sg napisa?(a): >> norbert pisze: >>> Witam >>> >>> Mam do?? ciekawy problem a mianowicie: >>> >>> Zalozylem na tabele kontrahent triggera i ten trigger ma by? >>> wywo?ywany w momentcie dodania nowego kontrachenta. Ale......... >>> tylko tego kontrhenta co ma wyró?nik 1 >>> i teraz w takim przypadku ma to zapisac do tabeli historia. >>> Fajnie jest bo to nawet dzi?a ale tylko wtedy gdy faktycznie >>> kontrahent ma wyró?nik 1. >>> W przypadku kontahenta który ma wyró?nik 0 to nawet faktycznie nie >>> zadzia?? trigger tak jak ma to by? lecz gdy ponownie dodam >>> kontrahenta z wyró?nikiem 1 to... >>> do tabeli historia wpisuje mi kontrahenta z wyró?nikiem 1 jak i 0 . >>> czemu tak si? dzieje? jak temu zaradzi? ?eby w tabeli historia byli >>> zawsze tylko kontrachenci z wyró?nikiem 1 >> >> wystarczy napisa? odpowiedni trigger... a tak to nawet nie wiadomo jak >> Ci pomóc, mo?e kawa?ek tabeli, triggera czy czego? podobnego by? pokaza?? > > IF EXISTS > ( > SELECT name FROM sysobjects > WHERE name = 'N_Trigger' AND type = 'TR' > ) > DROP TRIGGER N_Trigger > GO > > create trigger N_Trigger on kontrahent > after insert > > as > declare @wyroznik1 int > declare @stan_przed int > declare @stan_po int > select @wyroznik1 =(select wyroznik from inserted) > if (@rejestracja =1) tu jest (@wyroznik1 =1)
> begin > > SET @stan_przed = (select kasa from wplata where idkontrahenta =(select > id_kontrahenta from inserted where wyroznik =1)) > > > update wplata > set kasa = dbo.N_ZamOdOdb(id_kontrahenta) > where id_kontahenta =(select id_kontrahenta from inserted > where wyroznik =1 ) > > SET @stan_po = (select kasa from wplata where idkontrahenta =(select > id_kontrahenta from inserted where wyroznik =1)) > > INSERT INTO historia (data,stan_przed,stan_po) values > (getdate(),@stan_przed,@stan_po) > > end > go > > to wyglada dokladnie tak ze jesli
wybiore dodam
kontahenta z wyroznikiem 1 to > dopisze do tabeli historia wplaty a jesli dodam kontahenta z wyroznikiem > 0 to nie doda ale jesli powtornie dodam kontrahenta z wyroznikiem 1 to > stan_po jest suma dwoch ostatnich operacji. > I to nie jest spowodowane tym ze jest wykonywany dwa razy update bo > sprawdzalem
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Zdalny =?ISO-8859-2?Q?dost=EAp_do_MSSQL_bez_zarz=B1dzani?==?ISO-8859-2?Q?a?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
[MSSQL 2k] - jak =?ISO-8859-2?Q?pod=B3=B1czy=E6_serwer_na_?==?ISO-8859-2?Q?porcie_innym_ni=BF_1433=3F?=
MSSQL Express czy Oracle Express
MSSQL 2005 i uruchamianie procedury o =?ISO-8859-2?Q?okre=B6lone?==?ISO-8859-2?Q?j_godzinie?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
[MSSQL 2000] =?ISO-8859-2?Q?wywo=B3anie_procesu_z_poziomu_?==?ISO-8859-2?Q?job=27a?=
[MSSQL 2K] =?ISO-8859-2?Q?Wp=B3yw_ustawie=F1_regionalnych_?==?ISO-8859-2?Q?serwera_na_zapytania?=
Pobierananie danych z innej bazy danych w MSSQL
Migracja MSSQL 2005 CTP na 2005 Express
zanotowane.pldoc.pisz.plpdf.pisz.plred-hacjenda.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|