TRIGGER MS SQL SERVER 2005
SP - 11-05-2007 12:32
TRIGGER MS SQL SERVER 2005
Mam 2 tabele 1) WYNIKI ID_TEST DEC(8) ID_PYTANIE DEC(8) ID_ODPOWIEDZ DEC(8) ID_STUDENT DEC(8) ODP_UZYTKOW BIT IL_PUNKT_ODP REAL
2) ODPOWIEDZ ID_ODPOWIEDZ DEC(8) ID_PYTANIE DEC(8) IL_PUNKTOW REAL PRAW_ODP BIT
W tabeli wyniki wszystkie pola będą wstawione insertem prócz pola IL_PUNKT_ODP które ma się wypełniać automatycznie na podstawie danych z tabeli ODPOWIEDZ np. dla takiego samego ID_ODPOWIEDZ oraz gdy WYNIKI.ODP_UZYTKOW=ODPOWIEDZ.PRAW_ODP to w pole WYNIKI.IL_PUNKT_ODP wpisz ODPOWIEDZ.IL_PUNKTOW a gdy WYNIKI.ODP_UZYTKOW! =ODPOWIEDZ.PRAW_ODP to w pole WYNIKI.IL_PUNKT_ODP wpisz 0
Marcin A. Guzowski - 11-05-2007 12:32
SP pisze: > Mam 2 tabele > 1) WYNIKI > ID_TEST DEC(8) > ID_PYTANIE DEC(8) > ID_ODPOWIEDZ DEC(8) > ID_STUDENT DEC(8) > ODP_UZYTKOW BIT > IL_PUNKT_ODP REAL > > 2) ODPOWIEDZ > ID_ODPOWIEDZ DEC(8) > ID_PYTANIE DEC(8) > IL_PUNKTOW REAL > PRAW_ODP BIT > > W tabeli wyniki wszystkie pola będą wstawione insertem prócz pola > IL_PUNKT_ODP które ma się wypełniać automatycznie na podstawie danych > z tabeli ODPOWIEDZ np. dla takiego samego ID_ODPOWIEDZ oraz gdy > WYNIKI.ODP_UZYTKOW=ODPOWIEDZ.PRAW_ODP to w pole WYNIKI.IL_PUNKT_ODP > wpisz ODPOWIEDZ.IL_PUNKTOW a gdy WYNIKI.ODP_UZYTKOW! > =ODPOWIEDZ.PRAW_ODP to w pole WYNIKI.IL_PUNKT_ODP wpisz 0
I z czym masz problem, że tak przewrotnie spytam? Bo jeśli nawet liczysz, że ktoś zakoduje go za Ciebie, to też warto choćby o to poprosić.
-- Pozdrawiam, Marcin Guzowski http://guzowski.info
SP - 11-05-2007 12:32
On 2 Maj, 18:09, "Marcin A. Guzowski" <tu_wstaw_moje_i...@guzowski.info> wrote: > SP pisze: > > > > > Mam 2 tabele > > 1) WYNIKI > > ID_TEST DEC(8) > > ID_PYTANIE DEC(8) > > ID_ODPOWIEDZ DEC(8) > > ID_STUDENT DEC(8) > > ODP_UZYTKOW BIT > > IL_PUNKT_ODP REAL > > > 2) ODPOWIEDZ > > ID_ODPOWIEDZ DEC(8) > > ID_PYTANIE DEC(8) > > IL_PUNKTOW REAL > > PRAW_ODP BIT > > > W tabeli wyniki wszystkie pola będą wstawione insertem prócz pola > > IL_PUNKT_ODP które ma się wypełniać automatycznie na podstawie danych > > z tabeli ODPOWIEDZ np. dla takiego samego ID_ODPOWIEDZ oraz gdy > > WYNIKI.ODP_UZYTKOW=ODPOWIEDZ.PRAW_ODP to w pole WYNIKI.IL_PUNKT_ODP > > wpisz ODPOWIEDZ.IL_PUNKTOW a gdy WYNIKI.ODP_UZYTKOW! > > =ODPOWIEDZ.PRAW_ODP to w pole WYNIKI.IL_PUNKT_ODP wpisz 0 > > I z czym masz problem, że tak przewrotnie spytam? > Bo jeśli nawet liczysz, że ktoś zakoduje go za Ciebie, to też warto > choćby o to poprosić. > > -- > Pozdrawiam, > Marcin Guzowskihttp://guzowski.info
Poproszę więc o zakodowanie tego. Bo mimo kilku dni prób nie udało mi się.
Marcin A. Guzowski - 11-05-2007 12:32
SP pisze: > Poproszę więc o zakodowanie tego. Bo mimo kilku dni prób nie udało mi > się.
CREATE TRIGGER trig_wyniki ON WYNIKI INSTEAD OF INSERT AS BEGIN
INSERT INTO WYNIKI ( ID_TEST, ID_PYTANIE, ID_ODPOWIEDZ, ID_STUDENT, ODP_UZYTKOW, IL_PUNKT_ODP ) SELECT ins.ID_TEST, ins.ID_PYTANIE, ins.ID_ODPOWIEDZ, ins.ID_STUDENT, ins.ODP_UZYTKOW, CASE WHEN ins.ODP_UZYTKOW = odp.PRAW_ODP THEN odp.IL_PUNKTOW ELSE 0 END FROM inserted ins LEFT JOIN ODPOWIEDZ odp ON (odp.ID_ODPOWIEDZ = ins.ID_ODPOWIEDZ) END
Sprawdź, bo pisałem z pamięci. Wykorzystałem trigger typu INSTEAD OF, bo to klasyczny scenariusz pod jego użycie. Będzie najwydajniej, ale nie najwygodniej, gdyż w przypadku np. dodania kolumny trzeba mieć na uwadze kod triggera. Jeżeli użyty byłby trigger AFTER (w MSSQLu nazywa się to FOR), który updatowałby odpowiednie wiersze, to o utrzymywaniu listy kolumn w kodzie triggera można spokojnie zapomnieć. Z drugiej strony byłoby to jednak rozwiązanie mniej wydajne. Sam wybieraj, Ty znasz swoje rozwiązanie i jego potrzeby.
-- Pozdrawiam, Marcin Guzowski http://guzowski.info
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
[oracle] - Oracle SQL Developer - co to jest SID?
=?ISO-8859-2?Q?[Oracle]_Wywo=B3anie_skryptu_sh_z_PL/SQL-a=3F=3F?=
[oracle] Baza danych do kursy Introduction to Oracle9i:PL/SQL ? Skąd ją pobrać ?
Zapytanie SQL z =?ISO-8859-2?Q?pust=B1_tabel=B1?=
zanotowane.pldoc.pisz.plpdf.pisz.pladwokat.keep.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 |
|