關於 點部落 團隊
我們是一群普通的程式設計人員,在各自不同的領域發展, 由於對 IT 知識社群發展有一股的熱誠,所以我們一起創造了這個平台, 我們希望透過 點部落平台 能夠創造出更好的 IT 知識技術分享環境。 歡迎您參與點部落,也請給我們意見與指教,讓我們能夠持續的改善, 營造出更好的環境及平台。tw.dotblogs@gmail.com

常用連結

最新回應

在系統處理轉檔或轉資料時,對於轉資料方面,如果使用游標(cursor)來做轉資料,
處理的好的話,有些時候其實跟寫一個 .NET AP 來做讀資料寫入資料一樣,在轉入資料的時候,
可能會需要轉入的時間欄位不要每一個都一樣幾乎同分同秒,若需要能夠每筆資料的入時間欄位,
能夠有所不同,在 Curso 中就要自行時間變數的累加,而這個範例就分享自己轉入資料的經驗。

這個範例是使用 Update 方式,也可以針對狀況改成 INSERT

 

SET NOCOUNT ON
-- 定義這個Cursor 會用到的變數
DECLARE  @No int,@dt  datetime
-- 給予初值
SET @dt =getdate()

DECLARE mycursor CURSOR FOR 
-- 要查出來的欄位 
SELECT id FROM dbo.test1
--開啟游標
OPEN mycursor
-- 把值加入到自訂變數
-- 對應處理的欄位變數
FETCH NEXT FROM mycursor 
INTO @No

WHILE @@FETCH_STATUS = 0
BEGIN	
--要作要處理的事情
	
	
	UPDATE Test1
	-- 若使用這樣的方式因為處理的速度很快全部的值都是會一樣的
	-- SET sa_date = getdate() + 0.001
	SET sa_date = @dt	
	WHERE ID=@No
	-- 累加 @dt datetime 變數
	SET @dt = @dt + 0.003
   --讀取下一筆資料
   FETCH NEXT FROM mycursor    INTO @No
END

-- 關閉釋放

CLOSE mycursor
DEALLOCATE mycursor
GO

 

 

結果顯示如下:
image


補充說明關於 DateTime 增加的單位

 

SELECT getdate(),getdate()+1,(getdate()+1)-getdate()   
SELECT getdate(),getdate()+0.1,(getdate()+0.1)-getdate()   
SELECT getdate(),getdate()+0.01,(getdate()+0.01)-getdate()   
SELECT getdate(),getdate()+0.001,(getdate()+0.001)-getdate()   
SELECT getdate(),getdate()+0.0001,(getdate()+0.0001)-getdate() 
/*
+1 等於加上 1 天 (24小時)
+0.1 等於加上 144分鐘
+0.01 等於加上 14.24分鐘
+0.001 等於加上 1.264分鐘
+0.0001 等於加上 8.64秒
*/

 

詳細 Cursor 使用可以參考 http://msdn.microsoft.com/zh-tw/library/ms180169.aspx


回應

  • jameswu 2008/8/5 下午 09:48 回覆

    # re: [TSQL]使用游標(cursor)轉資料時,讓時間欄位遞增

    Dotjum,
    不錯的範例喔!!

    不過你用橘色的Highlight有點太搶眼
    ,閱讀起來有點累,建議換個顏色看看感謝囉!

     

     

     


*標 題:

*姓 名:

 電子郵件: (將不會被顯示)

 個人網頁:

*回應

登入後使用進階評論

Please add 7 and 2 and type the answer here: