Database trigger

Tags:    database

Hej alle. Jeg har en T-SQL database (Microsoft SQL 2008R2 EXPRESS).
Hvor jeg prøver at lave en trigger som følger

CREATE TRIGGER TR_StopMedlemDeletion ON MEDLEMMER
INSTEAD OF DELETE
AS
SELECT * FROM MEDLEMMER
set isActive = 0
WHERE MEDLEMMER.Fornavn = 'Cowboy'

Men jeg har to problemer. Hvordan laver jeg en variable som kan tage navnet på den som man prøver at delete?

Så jeg kunne skrive
WHERE MEDLEMMER.Fornavn = @navn

Samtidig virker set isActive = 0 heller ikke. Den acceptere ikke = tegnet.

Er der nogle der kan hjælpe mig på vej?
Tak på forhånd.



3 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Så vidt jeg husker det (fra dengang jeg blev certificeret) så er triggeren kontekstafhængig, dvs. den eksekveres NÅR du har slettet, fx, så den sletter andre, på baggrund af det du har slettet. Man må kunne få fat i kontaksten, eller noget information om det du lige har slettet.



Jeg fik arbejdet med det og lavede det som

ALTER TRIGGER TR_StopMedlemDeletion ON MEDLEMMER
INSTEAD OF DELETE
AS
DECLARE @Mellemnavn VARCHAR(10)
SELECT @Mellemnavn = Mellemnavn FROM INSERTED
UPDATE MEDLEMMER
set Mellemnavn = 'Inactive'
WHERE MEDLEMMER.Mellemnavn = @Mellemnavn
RAISERROR('Trigger kørt',16,1)

Dog mangler der et ekstra felt i kolonnen som er bit datatype. Hvor jeg kunne indikere 1 for true og 0 for false.

Men bare som test virker overstående.



jeg mener det kunne være noget i stil med:

create trigger tr_stopmedlemdeletion
on medlemmer
instead of delete
as
begin try
update medlemmer set isactive=0
where fornavn = inserted.fornavn




t