Avatar billede sblar Nybegynder
07. januar 2004 - 19:17 Der er 4 kommentarer og
1 løsning

Exit fra trigger

Jeg har et underligt problem med en trigger.

Problemet er at triggeren kun skal køres delvist, d.v.s. noget af koden skal ikke køres endnu (ikke i drift endnu).
Jeg troede selvfølgelig at en simpel RETURN før den del som ikke må køres var løsningen, men det virker ikke.
Hele triggeren køres alligevel!!!

CREATE TRIGGER [order_update] ON dbo.OrderQue
FOR UPDATE
AS

-- pkt.1 Kontrollerer et eller andet....
-- pkt.2 Opdaterer Centralordrer i PolbasSQL DB

DECLARE
@var1 int,
@var2 int,


-- Check ConnectionState for serverne. Hvis denne er = 'DB RUNNING' returneres 1, ellers -1
SET @Server1_OK = dbo.DBIsRunning('LI_SERVER1')
SET @Server2_OK = dbo.DBIsRunning('LI_SERVER2')


SET @var1 = (SELECT var1 FROM INSERTED)
SET @var2 = (SELECT var2 FROM INSERTED)

IF @Server1_OK = 1 BEGIN
-- Udfør et eller andet
END

-- Indtil idriftsættelse afsluttes her
RETURN -- VIRKER IKKE, DEN FORTSÆTTER ALLIGEVEL !!!!!

-- I desperation forsøgt:
IF 1=1 RETURN -- VIRKER IKKE, DEN FORTSÆTTER ALLIGEVEL !!!!!

SET NOCOUNT ON
SET XACT_ABORT ON


-- Opdatér tabel 2
-- Følgende må endnu ikke udføres...
--UPDATE DB2.dbo.Table2 SET Felt1=@Var1, Felt2=@Var2 WHERE Felt3=1

Hvordan kan det gå til?
Avatar billede Slettet bruger
07. januar 2004 - 19:57 #1
Kan du ikke bare lave det som kommentar? Mener det er /* der skal foran og */ for at afslutte en sådan.
Avatar billede trer Nybegynder
07. januar 2004 - 20:49 #2
Du kan benytte en GOTO og en label for at hoppe uden om den kode du ikke vil have afviklet.

Men Berties forslag er ganske fornuftigt - det giver endda bedre performance da den ubrugte kode så ikke skal parses og kompileres.

En anden ting; din trigger vil fejle såfremt den fyres på en bulkstatement. Triggere i MsSQL er "After statement" triggere, dvs. de fyres én gang før transaktionen commites/rulles tilbage.

Som du har skrevet triggeren forventer du at der altid kun vil være 1 række i Inserted - og det garenteres altså ikke...
Avatar billede trer Nybegynder
07. januar 2004 - 20:50 #3
Et andet tip: Du kan i øvrigt godt bruge

select @var1=var1, @var2=var2 from inserted

hvis du vil spare lidt kode...
Avatar billede sblar Nybegynder
07. januar 2004 - 21:10 #4
Jo, jeg kan sagtens bare lave det som kommentar, jeg blev bare lidt overrasket og nysgerrig da jeg opdagede at koden blev udført på trods af RETURN.
Det er ok som triggeren er skrevet - der er kun 1 række i inserted.
Ellers tak for tips, det sidste er smart trer.

Jeg lader lige ? stå åbent lidt endnu.
Avatar billede sblar Nybegynder
05. juli 2004 - 19:25 #5
lukker
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