IF EXISTS (SELECT name FROM sysobjects WHERE name = 'myTrigger' AND type = 'TR')
BEGIN
DROP TRIGGER myTrigger
END
GO
go
create trigger myTrigger
on mytable_backup
instead of insert
as
begin
declare @seq int
select @seq = seq from inserted
if exists (select * from mytable_backup where seq= @seq) begin
delete from mytable_backup where seq=@seq
end
insert into mytable_backup
select * from inserted
end
go
I’ve written this trigger to check while inserting if seq column is repeated then update the previous row with same seq if seq doesn’t exits insert it with new seq.
In ssis package I’m using OLEDB table(Mytable) as a source which contains.
Name,Age,Seq
Gauraw,30,1
Gauraw,31,1
Kiran,28,3
Kiran,29,3
kiran,28,3
Venkatesh,,4
Venkatesh,28,4
Now I’m loading this table to OLEDB destination(Mytable_backup) as destination.
I suppose to get output as.
Gauraw,31,1
kiran,28,3
Venkatesh,28,4
But I’m getting all the records from Mytable into Mytable_backup.
is anything wrong with my trigger?
I think that this trigger will just take the first row and compare it with the existing. If I understand what you want to do you can quit easy do this:
EDIT
So I found out what was going on. If you insert all of the rows in one go the
insertedcontains all the rows.. Sorry my mistake. If there are duplicates in your data your example do not show which to choose. I have chosen the one with the maximum of age (don’t know what your requirements is). Here is a update with the full exampleTable structure
Trigger
Insert of test data
Drop of the database objects