[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
補充說明關於 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