假设有以下表:

CREATE TABLE `user` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`id`)
);

首先,在 SQL Server 中创建一个存储过程,使用 CURSOR 循环插入数据,并使用 OUTPUT 参数返回插入记录的 ID 值:

CREATE PROCEDURE `insert_users` 
    @names VARCHAR(MAX),
    @ids VARCHAR(MAX) OUTPUT
AS
BEGIN
    DECLARE @name VARCHAR(50);
    DECLARE @id INT;
    DECLARE @cursor CURSOR;
    
    SET @ids = '';
    
    SET @cursor = CURSOR FOR
        SELECT value FROM STRING_SPLIT(@names, ',');
    
    OPEN @cursor;
    
    FETCH NEXT FROM @cursor INTO @name;
    
    WHILE @@FETCH_STATUS = 0
    BEGIN
        INSERT INTO `user` (`name`) VALUES (@name);
        SET @id = SCOPE_IDENTITY();
        SET @ids = CONCAT(@ids, CAST(@id AS VARCHAR), ',');
        FETCH NEXT FROM @cursor INTO @name;
    END
    
    CLOSE @cursor;
    DEALLOCATE @cursor;
    
    SET @ids = LEFT(@ids, LEN(@ids) - 1);
END

然后在 MybatisPlus 中调用存储过程,使用 Mapper 接口的 @Select 注解指定调用存储过程的 SQL 语句:

public interface UserMapper extends BaseMapper<User> {
    @Select("EXEC insert_users @names=#{names}, @ids=#{ids, mode=OUT, jdbcType=VARCHAR}")
    void insertUsers(@Param("names") String names, @Param("ids") String[] ids);
}

最后在代码中调用 insertUsers 方法即可插入数据并获取每条数据的 ID 值:

@Autowired
private UserMapper userMapper;

public void testInsertUsers() {
    String names = "张三,李四,王五";
    String[] ids = new String[1];
    userMapper.insertUsers(names, ids);
    System.out.println(Arrays.toString(ids[0].split(",")));
}
``
sqlserver 使用mybatisplus 创建存储过程在存储过程中使用循环方式逐条插入数据并回显每个插入记录的ID值。怎么操作

原文地址: http://www.cveoy.top/t/topic/hbNB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录