webForumDet fria alternativet

Göra saker i trigger

6 svar · 471 visningar · startad av devotion

devotionMedlem sedan jan. 20013 582 inlägg
#1

Jag tänkte skapa en trigger enligt:

CREATE TRIGGER a_InsertOnUpdateCustomT2
ON tblTask
FOR UPDATE
AS
IF UPDATE(CustomT2)
BEGIN
INSERT INTO a_tblTaskAreaChange (Modified, TaskId, TaskNr)
SELECT GETDATE(), Id, taskNr FROM inserted
END

Kan man få med både det gamla och det nya värdet på CustomT2 och skiva in det i tblTaskAreaChange ?

:)

Mvh
Henrik

@ndersMedlem sedan juni 200032 969 inlägg
#2

Det kan bli problematiskt - "inserted" innehåller bara värdena som finns efter updaten.

Kanske är det smartare att skapa en stored procedure som 1) sparar undan värden i en loggtabell, 2) uppdaterar, och 3) sparar värden efter ändring.

mvh

devotionMedlem sedan jan. 20013 582 inlägg
#3

Hej igen,

Det är följande Update jag vill köra:

UPDATE tblTask
	SET CustomT2 = 
	CASE
		-- Geografiska arbetsgrupper
		WHEN wg.id in (77713,77714,77715,77716,77717,77718,77720,77729) THEN 
			c.Category
		-- Natten
		WHEN wg.id in (77719) THEN 
			wg.Name
		-- Behåll
		ELSE 
			CustomT2 
	END, 
	Modified = GETDATE()
FROM tblTask t
INNER
	JOIN tblCustomer c
		ON t.CustomerNr = c.[Nr]
INNER 
	JOIN tblUsers u
		ON t.[User] = u.[Name]
INNER
	JOIN tblWorkGroups wg
		ON u.GroupId = wg.[Id]
WHERE DATEDIFF(d, t.planstartdate, GETDATE()) = 1
AND (t.CustomT2 IS NULL OR t.CustomT2 = '')

Hur får man till proceduren då? :)

Blir arbetsgången så här typ:

Göra en select på motsvarande urval skriva ner gamla värde till logg

göra update

skriva ner nya värden till logg

?

@ndersMedlem sedan juni 200032 969 inlägg
#4

devotion skrev:

Hur får man till proceduren då? :)

Blir arbetsgången så här typ:

Göra en select på motsvarande urval skriva ner gamla värde till logg

göra update

skriva ner nya värden till logg

?

Ja, det var så jag hade tänkt mig.

mvh

LarsGMedlem sedan dec. 200012 464 inlägg
#5
INSERT INTO a_tblTaskAreaChange (Modified, TaskId, TaskNr,oldT2,NewT2)
SELECT GETDATE(), inserted.Id, inserted.taskNr,inserted.customT2, deleted.customT2
  FROM inserted join deleted on inserted.id = deleted.id

under förutsättning att id är primärnyckel

devotionMedlem sedan jan. 20013 582 inlägg
#6

LarsG skrev:

INSERT INTO a_tblTaskAreaChange (Modified, TaskId, TaskNr,oldT2,NewT2)
SELECT GETDATE(), inserted.Id, inserted.taskNr,inserted.customT2, deleted.customT2
  FROM inserted join deleted on inserted.id = deleted.id

under förutsättning att id är primärnyckel

Det är det!

Ser ju finfint ut... :)

Skall testa när jag kommer hem...

Mvh
Henrik

devotionMedlem sedan jan. 20013 582 inlägg
#7

Perfekt! :)

Mvh
Henrik

144 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)