利用遊標迴圈進行更新插入的SQL事務語句
來源:互聯網
上載者:User
--開始事務
BEGIN TRAN
--不顯示計數資訊
SET NOCOUNT ON
DECLARE @UserID varchar(512)
DECLARE @a int
set @a=10000
--聲明遊標
DECLARE CRMPSContact_cursor CURSOR FOR
SELECT [UserID] FROM [gmcc].[dbo].[cvv_Users]
--開啟遊標
OPEN CRMPSContact_cursor
--取第一行的值給變數
FETCH NEXT FROM CRMPSContact_cursor
INTO @UserID
--執行語句
UPDATE [gmcc].[dbo].[cvv_Users]
SET [WorkID]=@a
WHERE [UserID]=@UserID
set @a=@a+1
--執行錯誤復原
if @@error!=0
begin
rollback tran
return
end
--移動遊標,其它所有行更新操作(當到結尾時退出)
WHILE @@FETCH_STATUS = 0
BEGIN
--遊標移到下一行
FETCH NEXT FROM CRMPSContact_cursor
INTO @UserID
--執行語句,從第二行開始
UPDATE [gmcc].[dbo].[cvv_Users]
SET [WorkID]=@a
WHERE [UserID]=@UserID
set @a=@a+1
--執行錯誤復原
if @@error!=0
begin
rollback tran
return
end
END
--關閉遊標
CLOSE CRMPSContact_cursor
--釋放遊標
DEALLOCATE CRMPSContact_cursor
--提交所有變更
COMMIT TRAN
--恢複設定
SET NOCOUNT OFF
GO