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