【发布时间】:2012-03-28 11:53:16
【问题描述】:
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
我编写了这个触发器来检查插入时是否重复seq 列,然后使用相同的seq 更新前一行,如果seq 不退出,则使用新的seq 插入它。
在 ssis 包中,我使用 OLEDB 表 (Mytable) 作为包含的源。
Name,Age,Seq
Gauraw,30,1
Gauraw,31,1
Kiran,28,3
Kiran,29,3
kiran,28,3
Venkatesh,,4
Venkatesh,28,4
现在我将此表加载到 OLEDB 目标 (Mytable_backup) 作为目标。
我想得到输出。
Gauraw,31,1
kiran,28,3
Venkatesh,28,4
但我将所有记录从Mytable 获取到Mytable_backup。
我的触发器有什么问题吗?
【问题讨论】:
-
触发器,像大多数 SQL 操作一样,对集合进行操作。您的假设一次只插入一行。这不是好兆头。
标签: sql sql-server sql-server-2008 triggers ssis