Dziękuje wam za odpowiedź. Nie wszystko co prawda zrozumiałem, ale dopytam się po skończeniu mojego zadania;)
crowa dziękuje za przykłady, jednak jak na razie są zbyt skomplikowane na mój móżdżek..., będę musiał nad tym więcej przysiąść ale to potem;)
Wracając do tematu:
Jako, ze okazało się, że program, który robi zmiany w bazie wykonuje je dla wszystkich użytkowników pod jednym loginem do bazy. Jednak udało mi się to obejść.
Ale wracając do tematu, zrobiłem tak że dla każdej operacji (INSERT, UPDATE, DELETE) wykonam oddzielny trigger:
INSERT
Kopiuj
-- TRIGGER LOGUJĄCY OPERACJE INSERT
ALTER TRIGGER [dbo].[zmiana_insert]
ON [dbo].[tw__Towar]
AFTER INSERT
AS
BEGIN
DECLARE
@uz_id int,
@what int,
@kiedy datetime,
@operacja varchar(10)
SELECT @uz_id=ss_uid FROM dbo.pd_Sesja WHERE (ss_spid = @@SPID)
SELECT @what = tw_Id FROM INSERTED
SELECT @kiedy = SYSDATETIME()
SELECT @operacja = 'INSERT'
SET NOCOUNT ON;
INSERT INTO dbo.zmiana_tw_towar([kto],[co],[kiedy],[operacja]) VALUES (@uz_id, @what, @kiedy, @operacja);
END
DELETE
Kopiuj
-- TRIGGER LOGUJĄCY OPERACJE DELETE
ALTER TRIGGER [dbo].[zmiana_delete]
ON [dbo].[tw__Towar]
FOR DELETE
AS
BEGIN
DECLARE
@uz_id int,
@what int,
@kiedy datetime,
@operacja varchar(10)
SELECT @uz_id=ss_uid FROM dbo.pd_Sesja WHERE (ss_spid = @@SPID)
SELECT @what = tw_Id FROM DELETED
SELECT @kiedy = SYSDATETIME()
SELECT @operacja = 'DELETE'
SET NOCOUNT ON;
INSERT INTO dbo.zmiana_tw_towar([kto],[co],[kiedy],[operacja]) VALUES (@uz_id, @what, @kiedy, @operacja);
END
Ale mam teraz problem z UPDATE, a mianowicie, przy operacji UPDATE, chciał bym zapisywać każdą zmianę osobno. Problem polega na tym, że nie wiem jak pobrać nową i starą wersje danej komórki. No i jak określić, która komórka jest zmieniana?
Czy podpowiecie w jaki sposób mogę to odczytać w podobnym triggerze do poprzednich?
Chciał bym to w miarę możliwości jak najprościej rozwiązać, stąd pozostaje przy opcji stworzenia trzeciego triggera.
Ewentualnie prosił bym o rady jak do tego podejść?
Z góry dziękuje za pomoc ;)