在一个事务中多次调用一个存储过程

时间:2021-06-18 03:23:47

标签: java sql-server spring-boot mybatis

我在事务中多次调用存储过程时遇到问题,该存储过程执行更新语句以增加字段的值并返回增加的值。第一次执行没问题,但后续的值都是一样的,他们只返回第一个更新的值。这是我的代码:

存储过程:

CREATE PROCEDURE [dbo].[GetEntityIdentity]
    -- Add the parameters for the stored procedure here
     @VarEntityId VARCHAR(20)  OUTPUT,
     @VarEntityName varchar(100)
AS
BEGIN
    SET NOCOUNT ON;
    SET @VarEntityId = NULL

    UPDATE dbo.Gm_Identity SET CurrentIdentity=Gm_Identity.CurrentIdentity+1 
    WHERE TableName = @VarEntityName

    IF @@ROWCOUNT = 0
    BEGIN   
         BEGIN
            INSERT dbo.Gm_Identity(TableName,CurrentIdentity) values(@VarEntityName, 10000)
         END
    END
    
    SELECT @VarEntityID = Cast(Gm_Identity.CurrentIdentity as Varchar)
    FROM dbo.Gm_Identity
    WHERE Gm_Identity.TableName = @VarEntityName
END

Java:

    @Test
    @Transactional
    void check(){
        for(int i=0;i<10;i++)
            System.out.println(tableUtilsService.getNextId("table1"));
    }

mybatis 的映射器 xml:

<select id="getNextIdentity" statementType="CALLABLE" parameterType="map">
        <![CDATA[
      { call GetEntityIdentity(#{id,mode=OUT,jdbcType=VARCHAR},#{tableName, mode=IN, jdbcType=VARCHAR}) }
        ]]>
</select>

0 个答案:

没有答案
相关问题