CREATE TRIGGER [TR_LogtabSerienbriefe]
ON [dbo].[tabSerienbriefe]
FOR INSERT,
UPDATE,
DELETE AS
Declare @Username
nvarchar(40)
Declare @UpdateDate
datetime
Declare @TableName
nvarchar(255)
Declare @Fieldname
nvarchar(150)
Declare @PersNr
int
Declare @ObjSchluessel
nvarchar(50)
Declare @ObjSchluesselBez
nvarchar(50)
Declare @Aktion
nvarchar(50)
Declare @Maskenname
nvarchar(255)
Declare @deleted
bit
Select @UserName =
system_user
Select @UpdateDate =
convert(
varchar(8), getdate(), 112) + '
' +
convert(
varchar(12), getdate(), 114)
Select @TableName = '
tabSerienbriefe'
Select @Maskenname = '
Serienbriefmanager'
-- Aktion bestimmen
if exists (
select *
from inserted)
begin
if exists (
select *
from deleted)
select @Aktion = '
Datensatz geändert'
else
select @Aktion = '
Datensatz eingefügt'
end
else
Select @Aktion = '
Datensatz gelöscht.'
Select @deleted = inserted.geloescht
from inserted
if (@deleted=1)
select @Aktion = '
Datensatz gelöscht'
-- Variablen für alte und neue Feldinhalte der Tabelle anlegen
Declare @OldSerienbriefNameExtern
nvarchar(255)
Declare @NewSerienbriefNameExtern
nvarchar(255)
Declare @OldSeitenNummer
nvarchar(255)
Declare @NewSeitenNummer
nvarchar(255)
-- Testen auf Änderung, wenn ja - Cursor anlegen (für den Fall mehrerer Datensätze)
IF (@Aktion = '
Datensatz eingefügt')
OR (@Aktion = '
Datensatz geändert')
OR (@Aktion = '
Datensatz gelöscht')
BEGIN
Declare iC
CURSOR LOCAL FAST_FORWARD
FOR
Select ID, SerienbriefNameExtern, SeitenNummer
from inserted
OPEN iC
FETCH NEXT
FROM iC
INTO @ObjSchluessel, @NewSerienbriefNameExtern, @NewSeitenNummer
END
IF (@Aktion = '
Datensatz gelöscht.')
OR (@Aktion = '
Datensatz geändert')
OR (@Aktion = '
Datensatz gelöscht')
BEGIN
Declare dC CURSOR LOCAL FAST_FORWARD
FOR
Select ID, SerienbriefNameExtern, SeitenNummer
from deleted
OPEN dC
FETCH NEXT
FROM dC INTO @ObjSchluessel, @OldSerienbriefNameExtern, @OldSeitenNummer
END
WHILE @@FETCH_STATUS = 0
BEGIN
Select @OldSerienbriefNameExtern = deleted.SerienbriefNameExtern
from deleted
Select @NewSerienbriefNameExtern = inserted.SerienbriefNameExtern
from inserted
-- Test auf Änderung dieses Feldes
IF (@OldSerienbriefNameExtern <> @NewSerienbriefNameExtern)
OR (@OldSerienbriefNameExtern
is null AND not @NewSerienbriefNameExtern
is null)
OR (
not @OldSerienbriefNameExtern
is null AND @NewSerienbriefNameExtern
is null)
OR (
not @OldSerienbriefNameExtern
is null AND @deleted = 1)
BEGIN
INSERT
INTO tabtest (test)
VALUES ( '
1_ '+@ObjSchluessel)
-- Test, welcher Wert hier steht. Es ist die richtige ID
IF @Aktion = '
Datensatz gelöscht'
SET @NewSerienbriefNameExtern =
NULL
Insert
into tabProtokoll (Username, Logdate, OldValue, NewValue, TableName, FieldName, PersNr, ObjektSchluessel, Aktion,
Values (@UserName, @UpdateDate, @OldSerienbriefNameExtern, @NewSerienbriefNameExtern, @TableName, '
Serienbriefname', @PersNr, @ObjSchluessel, @Aktion, @Maskenname)
INSERT
INTO tabtest (test)
VALUES ( '
2_ '+@ObjSchluessel)
-- Test, welcher Wert hier steht. Es ist auch hier die richtige ID
END
-- Nächstes Feld zum Protokollieren
Select @OldSeitenNummer = deleted.SeitenNummer
from deleted
Select @NewSeitenNummer = inserted.SeitenNummer
from inserted
IF (@OldSeitenNummer <> @NewSeitenNummer)
OR (@OldSeitenNummer
is null AND not @NewSeitenNummer
is null)
OR (
not @OldSeitenNummer
is null AND @NewSeitenNummer
is null)
OR (
not @OldSeitenNummer
is null AND @deleted = 1)
BEGIN
IF @Aktion = '
Datensatz gelöscht'
SET @NewSeitenNummer =
NULL
Insert into tabProtokoll (Username, Logdate, OldValue, NewValue, TableName, FieldName, PersNr, ObjektSchluessel, Aktion, Maskenname)
Values (@UserName, @UpdateDate, @OldSeitenNummer, @NewSeitenNummer, @TableName, '
SeitenNummer', @PersNr, @ObjSchluessel, @Aktion, @Maskenname)
END
IF (@Aktion = '
Datensatz eingefügt')
OR (@Aktion = '
Datensatz geändert')
OR (@Aktion = '
Datensatz gelöscht')
FETCH NEXT
FROM iC
INTO @ObjSchluessel, @NewSerienbriefNameExtern, @NewSeitenNummer
IF (@Aktion = '
Datensatz gelöscht.')
OR (@Aktion = '
Datensatz geändert')
OR (@Aktion = '
Datensatz gelöscht')
FETCH NEXT
FROM dC INTO @ObjSchluessel, @OldSerienbriefNameExtern, @OldSeitenNummer
END
-- Wenn Cursor erstellt wurde, hier wieder löschen
IF (@Aktion = '
Datensatz eingefügt')
OR (@Aktion = '
Datensatz geändert')
OR (@Aktion = '
Datensatz gelöscht')
BEGIN
DEALLOCATE iC;
END
IF (@Aktion = '
Datensatz gelöscht.')
OR (@Aktion = '
Datensatz geändert')
OR (@Aktion = '
Datensatz gelöscht')
BEGIN
DEALLOCATE dC;
END