ďťż
 
TRIGGER MS SQL SERVER 2005 ďťż
 
TRIGGER MS SQL SERVER 2005
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    =?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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • adwokat.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com