You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写接收Id和Place列表参数的存储过程实现批量更新Place列

解决方案

下面分不同数据库场景给出实现方案:

SQL Server 方案(推荐使用表值参数)

1. 定义用户自定义表类型

该类型用于接收传入的Id和Place批量数据:

CREATE TYPE IdPlaceList AS TABLE
(
    Id INT,
    Place VARCHAR(100) -- 请根据原表Place列的实际数据类型、长度调整
);

2. 创建存储过程

通过表值参数接收批量数据,用JOIN关联原表完成更新:

CREATE PROCEDURE UpdatePlaceByIdList
    @IdPlaces IdPlaceList READONLY
AS
BEGIN
    SET NOCOUNT ON;

    -- 匹配Id更新对应Place列
    UPDATE t
    SET t.Place = upl.Place
    FROM YourTableName t
    INNER JOIN @IdPlaces upl ON t.Id = upl.Id;

    -- 可选:返回受影响的行数
    SELECT @@ROWCOUNT AS UpdatedRows;
END;

3. 调用存储过程示例

-- 声明表值参数并填充待更新数据
DECLARE @UpdateList IdPlaceList;
INSERT INTO @UpdateList (Id, Place)
VALUES (1, '北京'), (2, '上海'), (3, '广州');

-- 执行存储过程
EXEC UpdatePlaceByIdList @IdPlaces = @UpdateList;

MySQL 方案(使用JSON参数)

如果使用MySQL,可通过JSON格式传递批量更新数据:

DELIMITER //

CREATE PROCEDURE UpdatePlaceByIdList(IN placeUpdates JSON)
BEGIN
    UPDATE YourTableName t
    JOIN (
        -- 解析JSON数组为行数据
        SELECT 
            JSON_UNQUOTE(JSON_EXTRACT(item, '$.Id')) AS Id,
            JSON_UNQUOTE(JSON_EXTRACT(item, '$.Place')) AS Place
        FROM 
            JSON_TABLE(placeUpdates, '$[*]' COLUMNS (item JSON PATH '$')) AS jt
    ) upl ON t.Id = upl.Id
    SET t.Place = upl.Place;
END //

DELIMITER ;

调用示例

CALL UpdatePlaceByIdList('[{"Id":1,"Place":"北京"},{"Id":2,"Place":"上海"}]');

注意事项

  • 将代码中的YourTableName替换为你的实际表名
  • 确保表值类型/JSON解析中的数据类型和原表Place列完全匹配,避免类型转换错误
  • 若需处理传入Id在原表中不存在的情况,可添加额外逻辑(比如筛选有效Id、记录无效Id)

内容的提问来源于stack exchange,提问作者Prasanna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:07:11