我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SqlServer 利用游标批量更新数据

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SqlServer 利用游标批量更新数据

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 ProvinceCursor
    INTO @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 = 0
    BEGIN
        UPDATE dbo.CommunityProjects
        SET CommunityId = CAST(ISNULL((
            SELECT ZhongyiCommunityId FROM dbo.CommunityMappings
            WHERE FangdiCommunityId = @projectId
        ),'-1') AS INT)
        WHERE OriginalProjectId = @projectId

        FETCH 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
BEGIN
    SET @provinceId =ISNULL((SELECT Id FROM dbo.Provinces WHERE Name = @RegionName), 0);
    IF @provinceId > 0
        PRINT 'UPDATE dbo.Provinces SET Code = ' + CONVERT(NVARCHAR(12), @RegionCode)+' WHERE Id = ' + CONVERT(NVARCHAR(12), @provinceId) +';';
    ELSE
        PRINT 'INSERT INTO dbo.Provinces(Name,Code) VALUES(N''' + @RegionName + ''',' + CONVERT(NVARCHAR(12), @RegionCode)+ ');';
    FETCH NEXT FROM ProvinceCursor
    INTO @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/

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SqlServer 利用游标批量更新数据

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SqlServer 利用游标批量更新数据

SqlServer 利用游标批量更新数据Intro游标在有时候会很有用,在更新一部分不多的数据时,可以很方便的更新数据,不需要再写一个小工具来做了,直接写 SQL 就可以了Sample下面来看一个实际示例:-- 声明字段变量DECLARE @RegionCod
SqlServer 利用游标批量更新数据
2022-03-17

sqlserver如何批量更新数据

在SQL Server中,可以使用以下方法批量更新数据:使用UPDATE语句和JOIN语句进行批量更新:UPDATE table1SET column1 = table2.column2FROM table1JOIN table2 O
sqlserver如何批量更新数据
2024-04-08

mongodb怎么批量更新数据

MongoDB提供了updateMany()方法来实现批量更新数据。updateMany()方法的语法如下:db.collection.updateMany(,,{upsert: ,writeConcern: ,collation: ,
2023-10-26

oracle如何批量更新数据

在Oracle中,可以使用UPDATE语句来批量更新数据。以下是一个示例:UPDATE your_tableSET column1 = 'new_value1',column2 = 'new_value2&
oracle如何批量更新数据
2024-04-22

mybatis怎么批量更新数据

MyBatis 可以通过批量操作来更新数据。下面是一个示例代码,展示如何使用 MyBatis 进行批量更新数据:1. 首先,需要在 Mapper XML 文件中定义一个批量更新的 SQL 语句,如下所示:```xmlUPDATE table
2023-08-09

mongodb如何批量更新数据

在MongoDB中,可以使用updateMany方法来批量更新数据。该方法接受两个参数,第一个参数是查询条件,用来匹配需要更新的文档,第二个参数是更新操作符和要更新的字段值。例如,假设我们有一个名为users的集合,其中有一个字段stat
mongodb如何批量更新数据
2024-05-11

navicat如何批量更新数据

navicat 提供三种方式批量更新数据:使用 sql 编辑器编写 update 语句、使用“数据编辑器”手动编辑、使用“更新向导”根据提示更新。Navicat 中批量更新数据如何批量更新 Navicat 中的数据?Navicat 提供
navicat如何批量更新数据
2024-06-13

大批量数据分批批量插入或更新(Mybatis+MySQL)

大批量数据分批批量插入或更新 在MySQL数据库的前提下,插入或更新大批量数据。首先批量插入需要考虑到以下几个因素: 数据库一次可以承受多大或者多少条数据的插入批量插入是否会占用Mysql资源太久,影响系统整体使用性能代码中的集合是否会造成
2023-08-30

hive怎么批量更新表数据

在Hive中,可以使用INSERT OVERWRITE语句来批量更新表数据。以下是一个示例:假设有一个表名为example,结构如下:CREATE TABLE example (id INT,name STRING,age INT);
hive怎么批量更新表数据
2024-03-14

sql怎么批量更新表数据

要批量更新表数据,可以使用SQL中的UPDATE语句结合WHERE条件来实现。以下是一个示例:UPDATE 表名SET 列名1 = 新值1, 列名2 = 新值2, ...WHERE 条件;示例:假设有一个表名为students,包
sql怎么批量更新表数据
2024-04-09

django怎么批量更新数据库

在Django中,可以使用update()方法对数据库进行批量更新操作。以下是一个示例:假设有一个名为Book的模型,该模型有一个字段price代表书籍的价格。现在要将所有书籍的价格调整为原来的两倍。from django.db.mod
2023-10-24

sql怎么批量更新多条数据

在 SQL 中,可以使用 UPDATE 语句来批量更新多条数据。下面是一个示例:```UPDATE 表名SET 列名1 = 值1,列名2 = 值2,...WHERE 条件;```例如,假设有一个名为 `students` 的表,包含 `id
2023-09-16

MySQL怎么批量更新多条数据

要批量更新多条数据,可以使用MySQL的UPDATE语句结合CASE语句来实现。以下是一个示例:假设有一个名为students的表,包含id、name和score字段,现在要将所有分数小于60的学生的分数更新为60。可以使用如下语句来实现
MySQL怎么批量更新多条数据
2024-04-17

oracle怎么批量更新百万数据

在Oracle数据库中,可以使用批量更新语句来更新大量数据。以下是一种常用的方法:创建一个临时表,将需要更新的数据插入到该临时表中。使用MERGE语句将临时表中的数据与目标表进行匹配和更新。具体步骤如下:创建一个临时表,例如temp_ta
oracle怎么批量更新百万数据
2024-03-01

MyBatis iterate优化大数据批量更新

在处理大数据批量更新时,MyBatis 提供了一些方法来优化性能。以下是一些建议:使用批量更新:在 MyBatis 的 XML 映射文件中,可以使用 标签进行批量更新。这样可以将多个更新操作合并为一个 SQL 语句,从而
MyBatis iterate优化大数据批量更新
2024-09-19

编程热搜

目录