Sql Server使用cursor处理重复数据过程详解

<div class="jb51code">
<pre class="brush:sql;">
/****

  • Code formatted by setyg
  • Time: 2014/7/29 10:04:44
    ****/

CREATE PROC HandleEmailRepeat
AS
DECLARE email CURSOR
FOR
SELECT e.email,e.OrderNo,e.TrackingNo
FROM Email20140725 AS e
WHERE e.[status] = 0
ORDER BY
e.email,e.TrackingNo

BEGIN
DECLARE @@email VARCHAR(200),@firstemail VARCHAR(200),@FirstOrderNO VARCHAR(300),@FirstTrackingNO VARCHAR(300),@NextEmail VARCHAR(200),@@orderNO VARCHAR(300),@NextOrderNO VARCHAR(50),@@trackingNO VARCHAR(300),@NextTrackingNO VARCHAR(50)

BEGIN
OPEN email;
FETCH NEXT FROM email INTO @firstemail,@FirstOrderNO,@FirstTrackingNO;
FETCH NEXT FROM email INTO @NextEmail,@NextOrderNO,@NextTrackingNO;
IF @NextEmail!=@firstemail
BEGIN
INSERT INTO Email20140725Test
(
email,OrderNo,TrackingNo
)
VALUES
(
@firstemail,@FirstTrackingNO
);
SET @@email = @NextEmail;
SET @@orderNO = @NextOrderNO;
SET @@trackingNO = @NextTrackingNO;
END
ELSE
BEGIN
SET @@email = @NextEmail;
SET @@orderNO = @FirstOrderNO+'、'+@NextOrderNO;
SET @@trackingNO = @FirstTrackingNO+'、'+@NextTrackingNO;
END

FETCH NEXT FROM email INTO @NextEmail,@NextTrackingNO 
WHILE @@fetch_status=0 
BEGIN 
  IF @NextEmail=@@email 
  BEGIN 
    IF (@NextOrderNO!=@@orderNO) 
      SET @@orderNO = @@orderNO+'、'+@NextOrderNO 

    PRINT 'orderNO:'+@@orderNO  

    IF (@@trackingNO!=@NextTrackingNO) 
      SET @@trackingNO = @@trackingNO+'、'+@NextTrackingNO 

    PRINT 'trackingNO:'+@@trackingNO 
  END 
  ELSE 
  BEGIN 
    INSERT INTO Email20140725Test 
     ( 
      email,TrackingNo 
     ) 
    VALUES 
     ( 
      @@email,@@orderNO,@@trackingNO 
     ); 
    SET @@email = @NextEmail; 
    SET @@orderNO = @NextOrderNO; 
    SET @@trackingNO = @NextTrackingNO; 
  END 
  FETCH NEXT FROM email INTO @NextEmail,@NextTrackingNO; 
END 
CLOSE email; --<a href="https://www.jb51.cc/tag/guanbi/" target="_blank" class="keywords">关闭</a>游标 
DEALLOCATE email; --释放游标 

END
END

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...