Avatar billede schroeter Nybegynder
30. september 2010 - 15:01 Der er 6 kommentarer og
1 løsning

Trigger

Hej

Jeg er ved at lave en trigger (min første), og er selvfølgelig stødt ind i et problem. FrontEnd er Access, når jeg kører nedenstående trigger på Customer tabellen. Er det sql'en under "else" som bliver effektureret.
Så min IF, bliver ikke opfyldt, det havde jeg forventet.
Umiddelbart tror jeg at problemet er hvor jeg giver variablerne værdier, "select @agreeNo = agreementNo FROM INSERTED", hvor jeg forventer at variablen @agreeNo får værdien, fra den aktuelle record. Er der nogen måde hvor jeg kan se hvilken værdi en variablen har på et givet tidspunkt i en trigger ?


ALTER TRIGGER [dbo].[updateInvoiceTo]
  ON  [dbo].[Customer]
  AFTER UPDATE
AS
    DECLARE @agreeNo varchar, @invoiceTo INT
    select @agreeNo = agreementNo FROM INSERTED
    select @invoiceTo = invoiceTo FROM INSERTED


BEGIN
IF @agreeNo = '09-2-101'
    UPDATE Customer SET invoiceTo = @invoiceTo where agreementNo = @agreeNo
ELSE
    UPDATE Customer SET invoiceTo = '123' where id = '7897'
END
Avatar billede HenrikSjang Nybegynder
30. september 2010 - 16:09 #1
Jeg er ikke helt sikker, men jeg mener at du er nødt til at angive størrelsen på din varchar variable - for ellers mener jeg at de kun er 1 tegn lange.

Så prøv at rette din declare linje til:

DECLARE @agreeNo varchar(20), @invoiceTo INT

og se om det gør en forskel.
Avatar billede janus_007 Nybegynder
30. september 2010 - 21:41 #2
Ja længden er default 1.

Du kan altid skrive noget fra en trigger, bare lav en select @agreeNo eller hvad du vil :)
Avatar billede schroeter Nybegynder
01. oktober 2010 - 08:57 #3
Hej sjang

Jeg har lige prøvet at ændre min declare linje, desværre gav det ingen forskel ?
Avatar billede schroeter Nybegynder
01. oktober 2010 - 09:01 #4
Hej janus_007

Jeg kan ikke få det til at virke, men det er nok fordi jeg misforstår det. Indsætter lige min kode, så har du måske større chance for at hjælpe. Jeg har prøvet at sætte linjen med select @agreeNo ind, men når jeg bruger access97 som frontend, hvordan kan jeg så se variablen ? Jeg har prøvet at sætte select @agreeNo ind i BEGIN også.

ALTER TRIGGER [dbo].[updateInvoiceTo]
  ON  [dbo].[Customer]
  AFTER UPDATE
AS
    DECLARE @agreeNo varchar(20), @invoiceTo INT
    select @agreeNo = agreementNo FROM INSERTED
    select @invoiceTo = invoiceTo FROM INSERTED


select @agreeNo

BEGIN
IF @agreeNo = '09-2-101'
    UPDATE Customer SET invoiceTo = @invoiceTo where agreementNo = @agreeNo
ELSE
    UPDATE Customer SET invoiceTo = '123' where id = '7897'
END
Avatar billede schroeter Nybegynder
01. oktober 2010 - 10:26 #5
Hej igen sjang

Jeg skal bare lave min kontrol rigtig, du havde ret, når der står nvarchar(20), kommer den i den rigtige del af IF løkken.
Nu har jeg så vendt et eller andet forkert i linjen

UPDATE Customer SET invoiceTo = @invoiceTo where agreementNo = @agreeNo

men det arbejder jeg lige videre med.

Tak og send et svar så jeg kan acceptere :-)
Avatar billede HenrikSjang Nybegynder
01. oktober 2010 - 11:10 #6
Fint fint.

Svar. :)
Avatar billede janus_007 Nybegynder
01. oktober 2010 - 19:41 #7
Tænkte du brugte et management studio siden du skrev i dette forum :)
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