Avatar billede MrsWeb Nybegynder
03. maj 2010 - 10:29 Der er 11 kommentarer og
1 løsning

Triggers i MS SQL server 2000

Jeg har en tabel, hvor jeg skal opdatere et datetime felt med getdate() hver gang en record bliver UPDATED.

Hvordan skriver jeg en trigger der opdaterer den samme record som har aktiveret triggeren?
Avatar billede Slettet bruger
03. maj 2010 - 11:00 #1
Det du forslår lyder som en endeløs loop?
Avatar billede MrsWeb Nybegynder
03. maj 2010 - 11:11 #2
Det skulle man kunne undgå ved at bruge @@nestlevel (Eller sådan noget.)
Avatar billede Slettet bruger
03. maj 2010 - 12:25 #3
Avatar billede MrsWeb Nybegynder
03. maj 2010 - 12:46 #4
Tak, men det løser ikke mit umiddelbare problem om hvordan jeg overhovedet kan skrive til den record, der har trigget noget
Avatar billede janus_007 Nybegynder
03. maj 2010 - 12:56 #5
Ikke begynde at rode med sp_configure, det kan give nogle sære resultater hvis man ikke ved 100% hvad man laver.

En trigger...

create trigger dbo.OnUpdateMyTable
ON dbo.MyTable
for update
as
begin
    if not update(datetimefeltet)
        update dbo.MyTable set datetimefeltet=getdate()        where id in (select id from inserted)
end

In bruges for a updaten ikke skal smide en fejl ved flere updates på en gang :)
Avatar billede MrsWeb Nybegynder
03. maj 2010 - 13:17 #6
Det ligner noget der kan bruges. Og den trigger ikke sig selv?
Avatar billede janus_007 Nybegynder
03. maj 2010 - 13:45 #7
Nej den chekker for om feltet, det felt som du gemmer dit datetime i. Og hvis det ikke er det der opdateres så.... :)
Avatar billede janus_007 Nybegynder
03. maj 2010 - 13:45 #8
Og et svar :)
Avatar billede MrsWeb Nybegynder
03. maj 2010 - 13:59 #9
OK - blot for lige helt at være sikker :)

mine updates ser ud som følger:
Mulighed 1: UPDATE pagedata SET header = 'blabla', bodytext = 'blablablabla' WHERE id = xxxx

Mulighed 2: UPDATE pagedata SET changedate = getdate(), header = 'blabla', bodytext = 'blablablabla' WHERE id = xxxx

Det er ikke altid at mulighed 2 benyttes. Og for at jeg ikke skal til at finde samtlige "UPDATE pagedata" i min kode, som er på over 350.000 linier, ville det være smart med en trigger.

Så har jeg ret i at en trigger som følgende vil kunne løse problemet?

create trigger dbo.OnUpdatePagedata
ON dbo.pagedata
for UPDATE
as
begin
    if not update(changedate)
        update dbo.pagedata set changedate=getdate() where id in (select id from inserted)
end


(Undskyld - men jeg er bare en dum blondine med meget mørkt hår.)
Avatar billede janus_007 Nybegynder
03. maj 2010 - 15:26 #10
Ja det vil den :)

Den opdatere således heller ikke ved mulighed 2, hvilket jo heller ikke giver nogen mening, medmindre nogle vil fuske med det?
Avatar billede MrsWeb Nybegynder
03. maj 2010 - 16:08 #11
Tusind tak for hjælpen.
Laver du lige et svar, så jeg kan godkende? :)
Avatar billede janus_007 Nybegynder
03. maj 2010 - 21:54 #12
Det har jeg allerede gjort, men her igen :)
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