触发器问题,急急急!
我写了一个触发器,主要是为了实现,把移动号插到tb_sys_sendmsg_bak 里面,同时要把phone和msg插到SendMsg_Result_Table里,但是每次批量插入的时候都是在SendMsg_Result_Table里面插了1条,不知道为什么,以下是代码,请各位大侠帮忙!
create TRIGGER [Tr_SensMsg_Insert1] ON dbo.Send_Temp_Table
INSTEAD OF INSERT
AS
declare @phone varchar(21),@msg varchar(160),@MsgID int
select @msg=SendMsg, @phone=DestAddr from INSERTED
where left(DestAddr,3) in ( '134 ', '135 ', '136 ', '137 ', '138 ', '139 ', '158 ', '159 ','150')
insert into tb_sys_sendmsg_bak (MessageText,PhoneNumber,flag)select SendMsg,DestAddr,'0' from INSERTED
where left(DestAddr,3) in ( '134 ', '135 ', '136 ', '137 ', '138 ', '139 ', '158 ', '159 ','150')
insert into Send_Temp_Table select * from INSERTED where left(DestAddr,3) not in ( '134 ', '135 ', '136 ', '137 ', '138 ', '139 ', '158 ', '159 ','150')
if exists(select * from SendMsg_Result_Table)
begin
select @msgid= max(msgid)
from SendMsg_Result_Table
set @msgid = @msgid+1
end
else
begin
set @msgid = 1
end
if @msgid is not null and @phone is not null
begin
insert into SendMsg_Result_Table(msgid,DestAddr,SendMsg,sendtime,SendResult) values (@msgid,@phone,@msg,getdate(),'发送成功!')
end
end
------解决方案--------------------触发器里用变量不支持批量,只有用游标一个个赋值给变量插入数据
------解决方案--------------------INSTEAD OF INSERT --这个触发器的类型,楼主要搞明白:
指定执行触发器而不是执行触发 SQL 语句,从而替代触发语句的操作。
------解决方案--------------------SQL code
create TRIGGER [Tr_SensMsg_Insert1] ON dbo.Send_Temp_Table
INSTEAD OF INSERT
AS
insert into tb_sys_sendmsg_bak (MessageText,PhoneNumber,flag)
select
SendMsg,DestAddr, '0 '
from
INSERTED
where
left(DestAddr,3) in ( '134 ', '135 ', '136 ', '137 ', '138 ', '139 ', '158 ', '159 ', '150 ')
insert into Send_Temp_Table
select
*
from
INSERTED
where
left(DestAddr,3) not in ( '134 ', '135 ', '136 ', '137 ', '138 ', '139 ', '158 ', '159 ', '150 ')
declare @phone varchar(21),@msg varchar(160),@MsgID int
declare Test cursor for
select SendMsg, DestAddr from INSERTED
where left(DestAddr,3) in ( '134 ', '135 ', '136 ', '137 ', '138 ', '139 ', '158 ', '159 ', '150 ')
open Test
fetch next from test into @msg,@phone
while @@fetch_status=0
begin
if exists(select * from SendMsg_Result_Table)
begin
select @msgid= max(msgid)
from SendMsg_Result_Table
set @msgid = @msgid+1
end
else
begin
set @msgid = 1
end
if @msgid is not null and @phone is not null
begin
insert into Se