日期:2014-05-18  浏览次数:20368 次

MSSQL 2005中触发器处理多条记录的问题
我有两张表,一张IP_Dev,一张IP_PoolV4,当IP_Dev中选用某个IP后,我需要更新IP_PoolV4中的相应IP的信息,比如将IP改变占用状态,同时我还需要分析是不是还有其它IP需要修改为不可用状态,比如使用了如下IP: IP=192.168.0.6,网关=192.168.0.5,掩码=255.255.255.252,我就必须要把这个IP段中的网关192.168.0.5、网络地址192.168.0.4和广播地址192.168.0.7改为不可有状态,这个操作是用一个存储过程来完成的。也就是说,我的触发器要干两件事:
1. 同步更新相应IP的占用状态和用户名
2. 分析这个IP使用后,IP库是不是有IP要修改为不可用状态
第一个需求不够Inserted表中有多少条记录,一条SQL命令就能完成:
UPDATE IP_PoolV4 SET Area=DB.局向,Used=1,_UserID=DB.ID,_UserName=DB.[Name],_UserTable='IP_Dev' FROM Inserted DB WHERE IP_PoolV4.IP=DB.IP

第二个需求我使用如下代码执行
SELECT @ip=DB.IP,@mask=DB.掩码,@gate=DB.网关 FROM Inserted DB
EXEC SyncV4IP @ip, @mask, @gate;
当Inserted表中只有一条记录的时候是没有问题的,有多条记录就不行了,我想知道我如何遍历Inserted表中的记录,对每条记录调用SyncV4IP这个存储过程。



------解决方案--------------------
如果按你现在的需求来讲的话那是要用游标的,但个人建议在此处最好不要用游标,因为游标比较慢,而且你又是在触发器中使用,这样的动作有一点大,最好能在程序中进行处理来实现你的需求,这样会比较好。
------解决方案--------------------
在觸發器的
AS
後面添加下面代碼
set nocount on