Ik heb voor een tabel een trigger geschreven die bij insert/update van data ook een timestamp moet wegschrijven. Maar sinds deze trigger loopt de transaction-log om de haverklap vol. Wat is er mis met deze trigger? De trigger verwijderen kan niet, omdat we afhankelijk zijn van goed bijgehouden timestamp en het systeem is te complex om alle queries aan te passen om timestamps mee te geven.
Het klopt dat het timestamp veld een varchar is. Tja, oud systeem
Daar kunnen we nu helaas niets aan doen.
Met die UPDATE(UpdateDate) probeer ik te voorkomen dat wanneer de kolom UpdateDate toch al in een insert/update statement zit, deze dubbel wordt gezet. En ook ter voorkoming van een eventuele loop (dat ie zichzelf gaat wijzigen omdat hij gewijzigd is, enz).
Extra info: het is voor een site die zo'n duizend bezoekers per dag ontvangt.
Is er iets mis met mijn trigger of moet ik het ergens anders zoeken?
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| CREATE TRIGGER [dbo].[UpdateJelAccounts] ON [dbo].[jelACCOUNTS] AFTER INSERT, UPDATE AS BEGIN SET NOCOUNT ON; DECLARE @date VARCHAR(14) IF UPDATE(UpdateDate) BEGIN RETURN END SELECT @date = CAST(YEAR(GETDATE()) AS VARCHAR) + CASE WHEN (LEN(MONTH(GETDATE())) = 1) THEN '0' + cast(month(getdate()) as varchar) ELSE cast(month(getdate()) as varchar) END + CASE WHEN (LEN(DAY(GETDATE())) = 1) THEN '0' + cast(day(getdate()) as varchar) ELSE cast(day(getdate()) as varchar) END + CASE WHEN (LEN(DATEPART(hh,GETDATE())) = 1) THEN '0' + cast(datepart(hh,getdate()) as varchar) ELSE cast(datepart(hh,getdate()) as varchar) END + CASE WHEN (LEN(DATEPART(mi,GETDATE())) = 1) THEN '0' + cast(datepart(mi,getdate()) as varchar) ELSE cast(datepart(mi,getdate()) as varchar) END + CASE WHEN (LEN(DATEPART(ss,GETDATE())) = 1) THEN '0' + cast(datepart(ss,getdate()) as varchar) ELSE cast(datepart(ss,getdate()) as varchar) END UPDATE jelACCOUNTS SET UpdateDate = @date FROM jelACCOUNTS j INNER JOIN Inserted i ON j.Email = i.Email END |
Het klopt dat het timestamp veld een varchar is. Tja, oud systeem

Daar kunnen we nu helaas niets aan doen.
Met die UPDATE(UpdateDate) probeer ik te voorkomen dat wanneer de kolom UpdateDate toch al in een insert/update statement zit, deze dubbel wordt gezet. En ook ter voorkoming van een eventuele loop (dat ie zichzelf gaat wijzigen omdat hij gewijzigd is, enz).
Extra info: het is voor een site die zo'n duizend bezoekers per dag ontvangt.
Is er iets mis met mijn trigger of moet ik het ergens anders zoeken?