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.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.plshanti.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 |
|