在SQL中插入触发器问题 - 如何解决? [英] Insert Trigger issue in SQL - How to resolve?

查看:110
本文介绍了在SQL中插入触发器问题 - 如何解决?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的SQL触发器代码。触发器将根据公差时间从table1到table3插入记录以获取活动服务。 table3在某些轮询间隔中被清除。在表3中插入(从触发器)和删除(轮询间隔)发生



例如,如果活动服务计数为3,但是记录只插入两个服务。



This is my SQL trigger code. trigger will insert the record from table1 to table3 for active services based on tolerancetime. table3 is getting cleared in certain polling interval.in table3 insertion (from trigger) and deletion (polling interval) happens

for example if active service count is 3 , but the record inserted for only two services.

ALTER TRIGGER [dbo].[insTrigger]
ON [dbo].[table1]
AFTER INSERT
AS
BEGIN
	
	DECLARE @servicecount INT   
	DECLARE @count INT	  
	DECLARE @tolerancetime INT	
	
	
	SET @tolerancetime =60
	SET @servicecount = (SELECT count(1) FROM [dbo].[table2] WITH (NOLOCK) WHERE servicetime >= DATEADD(mi,-@tolerancetime,GETDATE())) 
  
	
  IF(@servicecount != 0)

   BEGIN	 

	-- Looping till active service count
      WHILE(@count <= @servicecount)
	   BEGIN
	
	INSERT INTO table3 
			SELECT logid
			servicetype,			
			(SELECT rn.servicename FROM 
			(SELECT  row_number() OVER(ORDER BY t2.servicename ASC) AS rowno,t2.servicename,t2.servicetime FROM table2 t2 
			 WHERE t2.servicetime >= DATEADD(mi,-@tolerancetime,GETDATE())) rn
			 WHERE rn.rowno=@count)			 
			FROM inserted  
		WHERE 
			servicetype = started
	  	    AND 
			servicestarttime >= (SELECT t2.servicetime FROM(SELECT  row_number() OVER(ORDER BY t2.servicename ASC) AS rowno,t2.servicetime FROM table2 t2 
				WHERE t2.servicetime >= DATEADD(mi,-@tolerancetime,GETDATE())) rn
				WHERE rn.rowno = @count)
			
		SET @count = @count + 1
								
	   END
   END
END







请建议任何想法解决此问题以插入所有服务的记录




please suggest any idea to resolve this issue to insert record for all services

推荐答案

ROW_NUMBER(Transact-SQL) [ ^ ]从1开始,但你的循环从0开始...所以没有第0行,它插入第1行和第2行,永远不会到达插入第3行。



初始化计数为1
ROW_NUMBER (Transact-SQL)[^] starts from 1 but your loop starts from 0... so there is no row 0, it inserts rows 1 and 2 and never gets to insert row 3.

Initialise count to 1


这篇关于在SQL中插入触发器问题 - 如何解决?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆