insert into 批量插入, 触发器只响应最后一条数据,怎么办啊???
本帖最后由 Pc498471249 于 2013-03-28 15:54:24 编辑 这是触发器的代码
USE [QQData]
GO
/****** Object: Trigger [dbo].[tgr_Tab_10000_Insert] Script Date: 03/28/2013 15:20:43 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[tgr_Tab_10000_Insert]
ON [dbo].[Tab_10000]
for INSERT
AS
BEGIN
SET NOCOUNT ON;
declare @RepeatCount int=0;
declare @Id int;
declare @QQNumber bigint;
declare @QQPassword varchar(1000);
select @Id=Id,@QQNumber=QQNumber,@QQPassword=QQPassword from Inserted;
select top 1 @RepeatCount=count(QQNumber) from Tab_10000 where QQNumber=@QQNumber;
if(@RepeatCount>1)
begin
/*更新*/
set @QQPassword='∝'+@QQPassword;
update Tab_10000 set QQPassword=QQPassword+@QQPassword where QQNumber=@QQNumber and Id<>@Id;
/*删除*/
delete from Tab_10000 where Id=@Id;
end
END
insert into Tab_10000(QQNumber,QQPassword)
select 1000004,'我草草草哈哈' union
select 1000004,'我草草草哈哈' union
select 1000003,'哈哈哈嘿嘿' union
select 1000003,'123456'
select * from tab_10000
declare cur_insert cursor for
select a.Id,a.QQNumber,a.QQPassword,b.RepeatCount from inserted a left join (SELECT QQNumber,COUNT(1) RepeatCount FROM Tab_10000 GROUP BY QQNumber) b on a.QQNumber = b.QQNumber;
[解决办法]
游标这样定义会更好,执行速度会更高:
declare cur_insert cursor for
select a.Id,a.QQNumber,a.QQPassword,COUNT(1) RepeatCount from inserted a left join Tab_10000 b on a.QQNumber = b.QQNumber
group by a.Id,a.QQNumber,a.QQPassword;