日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SqlServer 利用游标批量更新数据

發布時間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SqlServer 利用游标批量更新数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SqlServer 利用游標批量更新數據

Intro

游標在有時候會很有用,在更新一部分不多的數據時,可以很方便的更新數據,不需要再寫一個小工具來做了,直接寫 SQL 就可以了

Sample

下面來看一個實際示例:

-- 聲明字段變量 DECLARE @RegionCode INT; DECLARE @RegionName NVARCHAR(64); DECLARE @ProvinceId INT; -- 聲明游標 DECLARE ProvinceCursor CURSOR FOR( SELECT Id AS ProvinceId, region.RegionCode,region.RegionName FROM dbo.Provinces AS province JOIN dbo.Regions AS region ON province.Name=SUBSTRING(region.RegionName,1, LEN(province.Name)) AND region.RegionType=1 ); -- 打開游標 OPEN ProvinceCursor; -- 移動游標,加載數據 FETCH NEXT FROM ProvinceCursor INTO @ProvinceId,@RegionCode,@RegionName; -- 游標加載數據成功WHILE @@FETCH_STATUS = 0 BEGIN--根據游標數據進行操作,這里只輸出要執行的 SQL 腳本,也可以直接 UPDATE,看自己需要PRINT 'UPDATE dbo.Provinces SET Code = ' + CONVERT(NVARCHAR(12), @RegionCode)+', Name = N'''+@RegionName +''' WHERE Id = ' + CONVERT(NVARCHAR(12), @provinceId) +';';-- 移動游標到下一條數據FETCH NEXT FROM ProvinceCursorINTO @ProvinceId,@RegionCode,@RegionName; END; CLOSE ProvinceCursor; DEALLOCATE ProvinceCursor;

Another Sample

DECLARE @projectId nvarchar(36)-- 聲明變量 DECLARE My_Cursor CURSOR --定義游標 FOR (SELECT OriginalProjectId FROM dbo.CommunityProjects WHERE CommunityId = -1)--查出需要的集合放到游標中 OPEN My_Cursor; --打開游標 FETCH NEXT FROM My_Cursor INTO @projectId; WHILE @@FETCH_STATUS = 0BEGINUPDATE dbo.CommunityProjectsSET CommunityId = CAST(ISNULL((SELECT ZhongyiCommunityId FROM dbo.CommunityMappingsWHERE FangdiCommunityId = @projectId),'-1') AS INT)WHERE OriginalProjectId = @projectIdFETCH NEXT FROM My_Cursor INTO @projectId;END CLOSE My_Cursor; --關閉游標 DEALLOCATE My_Cursor; --釋放游標

and more

DECLARE @RegionCode INT; DECLARE @RegionName NVARCHAR(64); DECLARE @provinceId INT; DECLARE ProvinceCursor CURSOR FOR( SELECT RegionCode,RegionName FROM dbo.Regions WHERE RegionType = 1); OPEN ProvinceCursor; FETCH NEXT FROM ProvinceCursor INTO @RegionCode,@RegionName; WHILE @@FETCH_STATUS = 0 BEGINSET @provinceId =ISNULL((SELECT Id FROM dbo.Provinces WHERE Name = @RegionName), 0);IF @provinceId > 0PRINT 'UPDATE dbo.Provinces SET Code = ' + CONVERT(NVARCHAR(12), @RegionCode)+' WHERE Id = ' + CONVERT(NVARCHAR(12), @provinceId) +';';ELSEPRINT 'INSERT INTO dbo.Provinces(Name,Code) VALUES(N''' + @RegionName + ''',' + CONVERT(NVARCHAR(12), @RegionCode)+ ');';FETCH NEXT FROM ProvinceCursorINTO @RegionCode,@RegionName; END; CLOSE ProvinceCursor; DEALLOCATE ProvinceCursor;

More

在做一些小數據量的數據操作時,游標會非常方便,而且游標比較靈活,你可以只生成更新數據的SQL,也可以打印出數據更新前后的值,以便錯誤更新數據之后的數據恢復

Reference

  • https://www.cnblogs.com/xielong/p/5941595.html

  • https://www.cnblogs.com/mrma/p/3794520.html

  • https://www.sqlservertutorial.net/sql-server-stored-procedures/sql-server-cursor/

  • https://www.mssqltips.com/sqlservertip/1599/sql-server-cursor-example/

總結

以上是生活随笔為你收集整理的SqlServer 利用游标批量更新数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。