Avatar billede a2pus Nybegynder
18. maj 2008 - 15:06 Der er 4 kommentarer

Problemer med en trigger

Hej

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;

-- variablerne erklæres
DECLARE @OppNr nvarchar(50), @TBNr nvarchar(50), @ProNr nvarchar(50), @ReviewNr int

select @OppNr=OpgNr, @TBNr=TBNr, @ProNr=ProNr, @ReviewNr=ReviewNr
from Inserted

IF (OppNr=null and @ReviewNr=null and @ProNr=null and @TBNr=null)

    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'
END

Jeg vil gerne have at fejlmeddelelsen kommer HVIS der ikke er indsat en værdi i enten OppNr, ReviewNr, ProNr eller TBNr (alle må ikke være 'null'.

Er der nogen der kan hjælpe?!

På forhånd tak
Anne
Avatar billede janus_007 Nybegynder
18. maj 2008 - 17:12 #1
Husk at chekke for nulls vha. IS NULL, dvs.

CREATE TRIGGER dbo.Opgave_Nr_All
  ON  dbo.Opgave
  AFTER INSERT,UPDATE  AS
begin
SET NOCOUNT ON;

-- variablerne erklæres
DECLARE @OppNr nvarchar(50), @TBNr nvarchar(50), @ProNr nvarchar(50), @ReviewNr int

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.
Avatar billede a2pus Nybegynder
18. maj 2008 - 17:58 #2
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
Avatar billede janus_007 Nybegynder
19. maj 2008 - 01:19 #3
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 :)
Avatar billede janus_007 Nybegynder
03. juni 2008 - 09:54 #4
Ping :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester