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)文章
mssql函數(shù)DATENAME使用示例講解(取得當(dāng)前年月日/一年中第幾天SQL語句)
這篇文章主要介紹了mssql函數(shù)DATENAME取得當(dāng)前年月日、一年中第幾天的SQL語句2013-11-11
hive中將string數(shù)據(jù)轉(zhuǎn)為bigint的操作
這篇文章主要介紹了hive中將string數(shù)據(jù)轉(zhuǎn)為bigint的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
insert select與select into 的用法使用說明
將一個table1的數(shù)據(jù)的部分字段復(fù)制到table2中,或者將整個table1復(fù)制到table2中,這時候我們就要使用SELECT INTO 和 INSERT INTO SELECT 表復(fù)制語句了2011-12-12
為數(shù)據(jù)庫生成某個字段充填隨機(jī)數(shù)的存儲過程
為數(shù)據(jù)庫生成某個字段充填隨機(jī)數(shù)2010-05-05
sqlserver合并DataTable并排除重復(fù)數(shù)據(jù)的通用方法分享
網(wǎng)上合并DataTable通用方法的文章很多,結(jié)合項(xiàng)目開發(fā)中的常用需求,并借鑒網(wǎng)上的做法,寫了一個合并DataTable的通用方法,主要功能是合并兩個DataTable(結(jié)構(gòu)可以不同,如字段不完全一致),并可以根據(jù)某一列值進(jìn)行排重處理2011-12-12
運(yùn)行asp.net程序 報(bào)錯:磁盤空間不足
未能加載文件或程序集“Ajax”或它的某一個依賴項(xiàng)。磁盤空間不足。 (異常來自 HRESULT:0x80070070)2011-10-10
SQL Server 高性能寫入的一些經(jīng)驗(yàn)總結(jié)
本篇博文將針對一些常用的數(shù)據(jù)庫性能調(diào)休方法進(jìn)行介紹,而且,為了編寫高效的SQL代碼,我們需要掌握一些基本代碼優(yōu)化的技巧,所以,我們將從一些基本優(yōu)化技巧進(jìn)行介紹2012-08-08
SQL Server誤區(qū)30日談 第8天 有關(guān)對索引進(jìn)行在線操作的誤區(qū)
在線索引操作會在操作開始時和操作結(jié)束時對資源上短暫的鎖。這有可能導(dǎo)致嚴(yán)重的阻塞問題2013-01-01
mssql存儲過程表名和字段名為變量的實(shí)現(xiàn)方法
mssql存儲過程表名和字段名為變量的實(shí)現(xiàn)方法,需要的朋友可以參考下。2011-11-11
SQL Server數(shù)據(jù)庫中批量導(dǎo)入數(shù)據(jù)的四種方法總結(jié)
數(shù)據(jù)導(dǎo)入一直是項(xiàng)目人員比較頭疼的問題。其實(shí),在SQL Server中集成了很多成批導(dǎo)入數(shù)據(jù)的方法,接下來為大家介紹下常用的四種批量導(dǎo)入數(shù)據(jù)的方法,感興趣的各位可以參考下哈2013-03-03

