Wyzwalacze w SQL

0

Witam serdecznie, mam do wykonania zadanie i niestety nie potrafię go samemu zrobić, poniżej wkleję treść zadania oraz kod który napisałem. Wszelka pomoc byłaby wielce wskazana.

Treść zadania:
"Utwórz tabelę Historia o kolumnach ID_his, Typ,, ID, Nazwisko,Placa_pod, Stanowisko,
Oddzial, Sysdate. Napisz wyzwalacz Trace na tabeli Pracownicy, który po każdej modyfikacji
(wstawiania, zmiany, usuwania) płacy podstawowej, stanowiska lub oddziału będzie wpisywał
wartości historyczne do tabeli Historia."

A poniżej mój kod:


-- Zakładanie tabeli Historia
IF OBJECT_ID('dbo.Historia','U') IS NOT NULL DROP TABLE dbo.Historia
GO
CREATE TABLE dbo.Historia (
	ID_his INT IDENTITY(1,1),
	Typ VARCHAR(1),
	ID INT,
	Nazwisko VARCHAR(30),
	Placa_pod FLOAT,
	Stanowisko VARCHAR(20),
	ID_Oddz VARCHAR(20),
	Sysdate DATETIME DEFAULT GETDATE(),
	[User] VARCHAR(30) DEFAULT SUSER_SNAME()
);
GO

-- Tworzenie wyzwalacza
IF OBJECT_ID('dbo.Trace','TR') IS NOT NULL DROP TRIGGER dbo.Trace
GO
CREATE TRIGGER dbo.Trace ON dbo.Historia
FOR INSERT, UPDATE, DELETE
AS
BEGIN
IF EXISTS (SELECT ID_his FROM inserted)
BEGIN

-- Stare wartości
IF EXISTS (SELECT ID_his FROM deleted)
BEGIN
INSERT INTO Historia
(Typ,ID,Nazwisko,Placa_pod,Stanowisko,ID_Oddz)
SELECT 'S', ID, Nazwisko, Placa_pod, Stanowisko,
ID_Oddz
FROM Pracownicy
END

-- Nowe wartości
INSERT INTO dbo.Historia
(Typ,ID,Nazwisko,Placa_pod,Stanowisko,ID_Oddz)
SELECT 'N', ID, Nazwisko, Placa_pod, Stanowisko, ID_Oddz
FROM inserted N
END ELSE BEGIN

-- Usuwane wartości
IF EXISTS (SELECT ID_his FROM deleted)
BEGIN
INSERT INTO Historia
(Typ,ID,Nazwisko,Placa_pod,Stanowisko,ID_Oddz)
SELECT 'U', ID, Nazwisko, Placa_pod, Stanowisko,
ID_Oddz
FROM Pracownicy
END
END
END
GO

-- Skrypt testujący
BEGIN TRAN
SELECT * FROM Historia;
UPDATE Pracownicy SET Placa_pod = 3800 WHERE Nazwisko = 'KOWAL';
select * from Pracownicy
DELETE FROM Pracownicy WHERE Nazwisko = 'BOGULA';
SELECT * FROM Historia;
ROLLBACK

Problem w tym, że żadne wartości nie są wpisywane do tabeli Historia, tabela jest cały czas pusta.

1

Trigger musisz założyć na tabeli, którą chcesz monitorować, czyli w tym przypadku na tabeli pracownicy, a ty założyłeś na tabeli historia. Np. dla usuwania pracownika:

Create trigger td_pracownik on pracownicy
For delete
As 
Begin
INSERT INTO Historia
(Typ,ID,Nazwisko,Placa_pod,Stanowisko,ID_Oddz)
SELECT 'S', ID, Nazwisko, Placa_pod, Stanowisko,
ID_Oddz
FROM deleted
End
Go

1 użytkowników online, w tym zalogowanych: 0, gości: 1