1、使用select执行存储过程
存储过程:
ALTER PROCEDURE [dbo].[proc_dev_test]
@ID INT,
@NAME varchar(50),
@iRet int=-1 output
AS
begin tran
insert into dev_test(id,name) values(@ID,@NAME)
IF @@ERROR<> 0 GOTO ERROR
commit
SET @iRet=9
select 9
RETURN
ERROR:
SET @iRet=-1
SELECT -1
ROLLBACK TRAN
RETURN
执行方式:
@Select("exec proc_dev_test #{id} ,#{name}")
int devProcTest(@Param("id") Integer id,@Param("name") String name);
得到的结果:
成功:
再次点击 主键冲突 失败:
更换执行方式:
@Insert("exec proc_dev_test #{id} ,#{name}")
int devProcTest(@Param("id") Integer id,@Param("name") String name);
小结:用output返回参数这样的存储过程执行,不管mybatis 用的Select 还是 INSERT 返回的都是output参数的值
那么我们更换下存储过程:
Create PROCEDURE [dbo].[proc_dev_test2]
@ID INT,
@NAME varchar(50)
AS
begin tran
insert into dev_test(id,name) values(@ID,@NAME)
IF @@ERROR<> 0 GOTO ERROR
commit
select 9
RETURN
ERROR:
SELECT -1
ROLLBACK TRAN
RETURN
使用select执行
@Select("exec proc_dev_test2 #{id} ,#{name}")
int devProcTest(@Param("id") Integer id,@Param("name") String name);
得到的结果:
而使用Insert 执行
@Insert("exec proc_dev_test2 #{id} ,#{name}")
int devProcTest(@Param("id") Integer id,@Param("name") String name);
得到的结果:
小结: 不用output返回参数这样的存储过程执行,SELECT 结果 返回的是SELECT的值 ,而Insert 执行的结果是受影响的行数 两个返回的是不同的结果