How to rewrite this update trigger without using a large number of variables?
I wrote my first SQL Server trigger, and it works fine, but I think there should be a simpler solution.
If at least one of the 5 columns is changed, I write two new rows in another table. line 1 = old Fahrer (= Driver) and old dispatcher and update time line 2 = new Fahrer and new dispodate and updatedatetime My solution is just a copy of the foxpro trigger, but in T-SQL there should be simpler solutions to check, changed whether one of them.
ALTER TRIGGER [dbo].[MyTrigger] ON [dbo].[tbldisposaetze] AFTER UPDATE AS SET NOCOUNT ON; DECLARE @oldfahrer varchar(10) DECLARE @oldbus varchar(10) DECLARE @olddispodat date DECLARE @oldvzeit decimal(4,0) DECLARE @oldbzeit decimal(4,0) DECLARE @oldbeschreibk varchar(255) DECLARE @newfahrer varchar(10) DECLARE @newbus varchar(10) DECLARE @newdispodat date DECLARE @newvzeit decimal(4,0) DECLARE @newbzeit decimal(4,0) DECLARE @newbeschreibk varchar(255) SELECT @oldfahrer = fahrer,@oldbeschreibk=beschreibk,@oldbus=bus,@oldbzeit=bzeit,@olddispodat=dispodat,@oldvzeit=vzeit FROM DELETED D SELECT @newfahrer = fahrer,@newbeschreibk=beschreibk,@newbus=bus,@newbzeit=bzeit,@newdispodat=dispodat,@newvzeit=vzeit FROM inserted I if @oldbeschreibk <> @newbeschreibk or @oldbus <> @newbus or @oldbzeit <> @newbzeit or @oldfahrer <> @newfahrer or @oldvzeit <> @newvzeit begin IF (SELECT COUNT(*) FROM tbldispofahrer where fahrer=@oldfahrer and dispodat=@olddispodat ) > 0 update tbldispofahrer set laenderung = GETDATE() where fahrer=@oldfahrer and dispodat=@olddispodat else INSERT into tbldispofahrer (fahrer,dispodat,laenderung) VALUES (@oldfahrer,@olddispodat,getdate()) IF (SELECT COUNT(*) FROM tbldispofahrer where fahrer=@newfahrer and dispodat=@newdispodat ) > 0 update tbldispofahrer set laenderung = GETDATE() where fahrer=@newfahrer and dispodat=@newdispodat else INSERT into tbldispofahrer (fahrer,dispodat,laenderung) VALUES (@newfahrer,@newdispodat,getdate()) end
source share