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

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

MsSql 更新时间:发布时间: 百科书网 趣学号
 
 
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.051e.com
本文地址:http://www.051e.com/it/169556.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号