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

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

在系統處理轉檔或轉資料時,對於轉資料方面,如果使用游標(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