ďťż
 
MS SQL Server - trigger ? ďťż
 
MS SQL Server - trigger ?
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

MS SQL Server - trigger ?



malki - 11-05-2006 13:00
MS SQL Server - trigger ?
  Witam,

To mój pierwszy post na grupie. Mam problem z triggerem.

W zalozeniach ma on w zaleznosci od aktualizowanego pola w Tabela_U
zagladac do tabeli Tabela_U i na podstawie pól z aktualizowanego
rekordu w U wybierac SELECTEM pole z T.

Problem w tym ze nie bardzo wiem jak przekazac wartosci rekordów z
T (Priorytet i Kategoria) do zapytania do tabeli U.

Oto co stworzylem do tej pory:

CREATE TRIGGER tTrig ON [dbo].[Tabela_U]
FOR UPDATE
AS

DECLARE @_Wartosc char(5)
DECLARE @_Priorytet char(20)
DECLARE @_Kategoria char(20)

SELECT @_Priorytet = Priorytet FROM Tabela_U <--- nie
dziala
SELECT @_Kategoria = Kategoria FROM Tabela_U <--- nie
dziala

SELECT @_Wartosc = Czas FROM [dbo].[Tabela_T]
WHERE Prio = @_Priorytet
AND Kat = @_Kategoria;

BEGIN
UPDATE [dbo].[Tabela_U]
SET [dbo].[Tabela_U].Tekst=@_Wartosc
END

Pozdrawiam,
Jacek





Sebastian - 11-05-2006 13:00

 
> W zalozeniach ma on w zaleznosci od aktualizowanego pola w Tabela_U
> zagladac do tabeli Tabela_U i na podstawie pól z aktualizowanego
> rekordu w U wybierac SELECTEM pole z T.

Troche to pokretnie opisales. Z tego co napisales zrozumialem, ze chcesz
zeby UPDATE zwrocilo wynik taki jak SELECT a tego nie mozna zrobic. Moze
sprobowac ewentualnie umiescic takie rekordy w jakiejs pomocniczej tabeli.

> Problem w tym ze nie bardzo wiem jak przekazac wartosci rekordów z
> T (Priorytet i Kategoria) do zapytania do tabeli U.

Co rozumiesz pod sformulowaniem "przekazac wartosci rekordow z T do
zapytania". Czy chcesz tych wartosci uzyc w jakims poleceniu typu
UPDATE/INSER/DELETE? Czy podstawic pod zmienna?

SELECT @_Priorytet = Priorytet FROM Tabela_U <--- nie dziala
SELECT @_Kategoria = Kategoria FROM Tabela_U <--- nie dziala

Powyzsze zapytania nie dzialaja bo podejrzewam, ze tabela Tabela_U zawiera
wiecej niz 1 wiersz a nie mozna wielu wartosci podstawic do jednej zmiennej.
Podejrzewam, ze brakuje tutaj warunku WHERE.

A tak z innej beczki w Twoim trigerze nie zauwazylem zaleznosci dzialania od
modyfikowanych wartosci a zazwyczaj taka zaleznosc wystepuje. Chodzi mi o
pseudo tabele INSERTED i DELETED, ktore zawieraja wartosci zmodyfikowanych
wierszy przed i po modyfikacji. Jesli moja podpowiedz nic Ci nie pomogla to
postaraj sie opisac dokladniej jaki efekt chcesz osiagnac.
Pozdrawiam

Sebastian




malki - 11-05-2006 13:00

  hej,

Już wiem gdzie popełniłem błąd. Poprostu nie umieściłem nie
dodałem FROM INSERTED

było:
> SELECT @_Priorytet = Priorytet FROM Tabela_U <--- nie dziala
> SELECT @_Kategoria = Kategoria FROM Tabela_U <--- nie dziala

jest:

SELECT @_Priorytet = Priorytet FROM Tabela_U FROM INSERTED
SELECT @_Kategoria = Kategoria FROM Tabela_U FROM INSERTED

Mam natomiast teraz inny problem. Jak ograniczyć ten trigger żeby
działał tylko w przypadku updateowania konkretnych pól z
aktualizowanego rekordu ?




- 11-05-2006 13:00

  [ciach]
Mam natomiast teraz inny problem. Jak ograniczyć ten trigger żeby
działał tylko w przypadku updateowania konkretnych pól z
aktualizowanego rekordu ?

W books on line w opisie polecenia CREATE TRIGGER przeczytaj fragment o
UPDATE() i COLUMNS_UPDATED()

Pozdrowienia
Alwik
  • 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
  • shanti.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com