Avatar billede hedemann Nybegynder
29. juni 2007 - 10:36 Der er 6 kommentarer og
1 løsning

Trigger og insert problem

Jeg har en tabel (SMSAlert) hvortil der er tilknyttet en INSERT AFTER trigger. Triggeren afvikler et exe-program.

== Trigger ==
TRIGGER SendSMSTrigger
ON dbo. SMSAlert
AFTER INSERT
AS
Declare @id nvarchar(250)
Declare @cmdline nvarchar(250)

SELECT @id=ins.id  FROM inserted ins
Commit

Set @cmdline = '"D:\SMSAlert\SendSMSAlert.exe"  ' + @id
EXEC master..xp_cmdshell @cmdline

En SP gennemløber nogle tabeller, og checker deres data. Under nogle givende omstændigheder kan der ske det, at der skal indsættes to rækker i tabellen SMSAlert (den med triggeren). Og det er her problemet opstår, idet det kun den første række der indsættes - anden række indsættes ikke i SMSAlert. Hvis så triggeren fjernes fra tabellen så er der intet problem. Så der må være noget med den tid triggeren bruger på at eksekver exe- programmet og en evt. timeout og så den tid der er mellem de to INSERT.

Klip fra SP, der indsætter rækker i tabellen SMSAlert..

IF @dato <> @dato2
  BEGIN
      INSERT INTO SMSAlert (mobil, tekst, afsender, firma)
      VALUES (......................)
  END

IF @dato <> @dato3
  BEGIN
      INSERT INTO SMSAlert (mobil, tekst, afsender, firma)
      VALUES (......................)
  END

Er der nogle der kan hjælpe…….?
Avatar billede arne_v Ekspert
01. juli 2007 - 02:46 #1
Er du på SQLServer 2005 eller 2000 ?
Avatar billede hedemann Nybegynder
01. juli 2007 - 21:45 #2
det er på 2000
Avatar billede arne_v Ekspert
01. juli 2007 - 22:06 #3
2005 havde nogle ekstra muligheder.

Hvad med:

Set @cmdline = 'START "D:\SMSAlert\SendSMSAlert.exe"  ' + @id

?
Avatar billede janus_007 Nybegynder
02. juli 2007 - 02:15 #4
Må jeg foreslå en mere robust løsning?

Istedet for at kalde en exe fra din trigger, så indsæt en række i en slags notifikationstabel og kig i notifikationstabellen vha. en jobagent og en stored procedure, på den måde får du hurtig inserts og et mere fleksibelt system - det kunne jo tænkes at SendSMSAlert ikke skulle kaldes for alt!

Min erfaring siger mig at man lige skal overveje arkitekturen igen når man roder sig ud i triggere, hellere et løst koblet system, hvis det kan lade sig gøre :)
Avatar billede hedemann Nybegynder
06. juli 2007 - 15:41 #5
Jeg har fundet en anden løsning i sted for en trigger, kalder et exe-program fra min SP istedet.

Jeg ved ikke hvem der skal ha' poiont.?
Avatar billede arne_v Ekspert
07. juli 2007 - 00:39 #6
For min skyld må du gerne tage dem tilbage.
Avatar billede hedemann Nybegynder
06. august 2007 - 10:31 #7
Okay, dem snupper jeg så
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