不用游标实现遍历

来源:互联网 发布:多线程并发写数据库 编辑:程序博客网 时间:2024/06/05 09:01

/****** Object:  Trigger [dbo].[TR_JISHUI_LASTEST]    Script Date: 03/10/2015 15:07:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[TR_DJISHUI_LASTEST]
ON [dbo].[T_JISHUI_LASTEST]
FOR INSERT,UPDATE
AS
BEGIN
    DECLARE @S_HASMONITOR VARCHAR(30)
SELECT @S_HASMONITOR=S_HASMONITOR FROM INSERTED Tam left join sde.T_JISHUI_MONITOR as Tab on Tam.S_NO=Tab.S_NO
  
 IF @S_HASMONITOR<>'dd'
   BEGIN
INSERT INTO T_JISHUI_HISTORY
(S_NO,T_STIME,T_SYSTIME,N_VALUE,S_C,S_V,S_WATERDESC,S_CDESC,S_VDESC,S_TREND,S_TYPE,S_CREATEUSER,N_WATERVALUE,N_CJZ)
SELECT S_NO,T_STIME,T_SYSTIME,N_VALUE,S_C,S_V,S_WATERDESC,S_CDESC,S_VDESC,S_TREND,S_TYPE,S_CREATEUSER,N_WATERVALUE,N_CJZ FROM INSERTED


INSERT T_JISHUI_OFFLINE (S_NO,T_BEGINTIME, T_ENDTIME,N_LENGTH)
SELECT I.S_NO,D.T_SYSTIME,I.T_SYSTIME,DATEDIFF(MI,D.T_SYSTIME,I.T_SYSTIME) FROM INSERTED I INNER JOIN DELETED D ON I.S_NO=D.S_NO WHERE DATEDIFF(MI,D.T_SYSTIME,I.T_SYSTIME)>=120




BEGIN TRY
CREATE TABLE #TMP
(
N_ID INT IDENTITY,
S_NO VARCHAR(32),
N_VALUE DECIMAL(18,2),
T_STIME DATETIME,
T_SYSTIME DATETIME
)

INSERT INTO #TMP(S_NO,N_VALUE,T_STIME,T_SYSTIME) 
SELECT S_NO,N_VALUE,T_STIME,T_SYSTIME FROM INSERTED WHERE S_CREATEUSER='TWO' OR S_CREATEUSER='wmt'

DECLARE @FLG INT
DECLARE @CUNT INT
DECLARE @S_NO VARCHAR(32)
DECLARE @N_VALUE DECIMAL(18,2)
DECLARE @T_STIME DATETIME
DECLARE @T_SYSTIME DATETIME
SELECT @CUNT=COUNT(N_ID) FROM #TMP
SET @FLG=1

WHILE @FLG<(@CUNT+1)
BEGIN
SELECT @S_NO=S_NO,@N_VALUE=N_VALUE,@T_STIME=T_STIME,@T_SYSTIME=T_SYSTIME FROM #TMP WHERE N_ID=@FLG
IF NOT EXISTS (SELECT N_ID FROM LZJXLJ.DBO.T_XLJ_LASTEST WHERE S_NO=@S_NO)
BEGIN
INSERT INTO LZJXLJ.DBO.T_XLJ_LASTEST(S_NO,N_VALUE,T_STIME,T_SYSTIME) VALUES (@S_NO,@N_VALUE,@T_STIME,@T_SYSTIME)
END
ELSE
BEGIN
UPDATE LZJXLJ.DBO.T_XLJ_LASTEST SET N_VALUE=@N_VALUE,T_STIME=@T_STIME,T_SYSTIME=@T_SYSTIME WHERE S_NO=@S_NO
END
SET @FLG=@FLG+1
END
DROP TABLE #TMP
END TRY
BEGIN CATCH
END CATCH
END

END
0 0
原创粉丝点击