Sql Server使用cursor處理重復(fù)數(shù)據(jù)過程詳解
更新時(shí)間:2014年08月01日 09:50:02 投稿:whsnow
本節(jié)主要介紹了Sql Server cursor的使用,以處理重復(fù)數(shù)據(jù)為例,需要的朋友可以參考下
/************************************************************
* 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.OrderNo
,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
,@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; --關(guān)閉游標(biāo)
DEALLOCATE email; --釋放游標(biāo)
END
END
相關(guān)文章
SQL2000中改名和刪除默認(rèn)sa帳號的最安全方法
眾所周知,在M$sql中有個(gè)絕對是網(wǎng)絡(luò)安全中的隱患的帳號sa,系統(tǒng)管理員 (sa),默認(rèn)情況下,它指派給固定服務(wù)器角色 sysadmin,并不能進(jìn)行更改。2008-03-03
SQLSERVER ISNULL 函數(shù)與判斷值是否為空的sql語句
由于服務(wù)器設(shè)置不當(dāng)導(dǎo)致sqlserver的某個(gè)字段為空,導(dǎo)致部分內(nèi)容顯示失敗,所有這里需要將為空的字符替換為制定的字符2013-11-11
SQLite之Autoincrement關(guān)鍵字(自動(dòng)遞增)
SQLite 的 AUTOINCREMENT 是一個(gè)關(guān)鍵字,用于表中的字段值自動(dòng)遞增,關(guān)鍵字 AUTOINCREMENT 只能用于整型(INTEGER)字段。2015-10-10

