2014-02-07 4 views
0

У меня есть хранимая процедура, которая возвращает идентификатор (SQL Server 2005):Как вернуть Id вставки хранимой процедуры + mybatis

BEGIN 
    INSERT INTO 
     rolTemplateWeek(rolWeek,employee,date_insert) 
     VALUES(@numberRol,@employeeId,getDate()) 
    Select @id = @@IDENTITY 
END 

Mapper.xml

<insert id="saveRol" parameterType="com.service.specual.dto.RolWeek" statementType="CALLABLE"> 
    { call saveRolWeek(
     #{numberRol,javaType=Integer,jdbcType=INTEGER,mode=IN}, 
     #{employeeId,javaType=Integer,jdbcType=INTEGER,mode=IN}, 
     #{id,javaType=Integer,jdbcType=INTEGER,mode=OUT} 
    )} 
</insert> 

RolWeek.class

public class RolWeek { 

    private int id; 
     private int numberRol; 
    private int employeeId; 
     .... get & setters 

Mapper.java

RolWeek rolWeek= new RolWeek(); 
    rolWeek.setNumberRol(120); 
    rolWeek.setEmployeeId(100); 

    public int saveServiceRolWeek(RolWeek rolWeek); 

Вставить штраф, но не вернуть мой идентификатор, только «1» ¿, как я мог бы вернуть свой вставленный идентификатор?

ответ

1
-- 
-- Use output clause, make sure id is OUTPUT 
-- 

CREATE PROCEDURE saveRolWeek 
    @numberRol INT, 
    @employeeId INT, 
    @id INT OUTPUT 
AS 
BEGIN 

    SELECT @id = 
     INSERT INTO rolTemplateWeek(rolWeek, employee, date_insert) 
     OUTPUT INSERTED.ID 
     VALUES(@numberRol, @employeeId, getDate()); 
END 

-- Sample call with 1, 1 as parameters 
DECLARE @retid int = null; 
EXECUTE dbo.saveRolWeek 1, 1, @retid = @id OUTPUT; 
+0

Спасибо, да, мой идентификатор выведен. Когда я попытался изменить мою хранимую процедуру с помощью coude, покажите мне ошибку со вставкой: «OUTPUT INSERTED.ID» это утверждение должно быть посередине? – vljc2004

Смежные вопросы