Jeg sidder og er ved at lave en trigger på en database. Jeg har fået den til at virker nogenlunde, bortset fra den udløses lige meget om betingelsen er opfyldt eller ej.
koden er som følger: CREATE TRIGGER dbo.Opgave_Nr_All ON dbo.Opgave AFTER INSERT,UPDATE AS begin SET NOCOUNT ON;
select @OppNr=OpgNr, @TBNr=TBNr, @ProNr=ProNr, @ReviewNr=ReviewNr from Inserted
IF (OppNr IS NULL OR @ReviewNr IS NULLOR @ProNr IS NULL and OR @TBNr IS NULL) begin print 'Fejl - der må ikke oprettes en opgave uden der tilføjes en værdi i et af følgende felter: OppNr, ReviewNr, ProNr, TBNr'
rollback end END
Som du kan se har jeg også smidt en rollback ind i triggeren, uden den får du indsat rækken alligevel. Du er også muligt for dig at anvende en INSTEAD OF trigger, her kan du undgå en ROLLBACK, men skal således selv sørge for inserten, hvis kriteriet er opfyldt. Nu uden at blande mig i dit db-design, men kunne du ikke blot oprette tabellen med non nullable så vil du få rejst en fejl ved null-inserts og behøver ingen trigger.
Grunden til jeg ikke har har sat ProNr, TBNr, ReviewNr og OppNr til at være not null, skyldes at kun en af disse felter skal være udfyldt. Jeg vil forhindre at der kan oprettes en opgave, hvor ingen af disse kolonner har en værdi... Håber det giver mening
På den måde.. jo det giver da mening, jeg vil anbefale dig at bruge en check constraint istedet. Det er hurtigere og egentlig "mere" korrekt!
alter table dbo.Opgave_Nr_All add constraint CK_notnull check ([OpgNr] is not null or [TBNr] is not null or [ProNr] is not null or [ReviewNr] is not null)
Nåmen nu kan du selv vælge om du vil bruge triggermetoden som jeg postede tidligere eller contraint metoden :)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.