栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 数据库 > MySQL > MsSql

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

MsSql 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

 
 
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.OrderNo 
     ,e.TrackingNo 
 
BEGIN 
  DECLARE @@emailVARCHAr(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 
 ,@FirstOrderNO 
 ,@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,@NextOrderNO,@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 
   ,OrderNo 
   ,TrackingNo 
  ) 
 VALUES 
  ( 
   @@email 
   ,@@orderNO 
   ,@@trackingNO 
  ); 
 SET @@email = @NextEmail; 
 SET @@orderNO = @NextOrderNO; 
 SET @@trackingNO = @NextTrackingNO; 
      END 
      FETCH NEXT FROM email INTO @NextEmail,@NextOrderNO, @NextTrackingNO; 
    END 
    CLOSE email; --关闭游标 
    DEALLOCATE email; --释放游标 
  END 
END

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/169556.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号