当前位置: 代码迷 >> Sql Server >> 如何获取存储过程里边的错误
  详细解决方案

如何获取存储过程里边的错误

热度:31   发布时间:2016-04-27 11:06:24.0
怎么获取存储过程里边的异常
主键是:MedicalNo 、DeptID 、AppointTime 、PeriodID ,怎么获取主键插入异常? 我插入同一记录,存储过程只是回滚,并没有报错


SQL code
CREATE PROCEDURE P_Appoint @MedicalNo NVarChar (50),@MedicalName NVarChar (50),@DeptID NVarChar (50),@PeriodID NVarChar (50),@AppointTime datetime,@ManCreate NVarChar (50),@TimeCreate datetime,@ShiftID NVarChar (50),@Remarks NVarChar (100),@Descript NVarChar (100),@SNO  NVarChar (50) outputASdeclare  @Counter  intset xact_abort on                                         --这样写,当一个有错误的时候会回滚整个事务begin transelect top 1  @Counter=SerialNO from SerialList           ---取得序列号set @[email protected]+1                                   ---序列号+1update SerialList set [email protected]                   ---更新SerialListset @SNO=convert(char(8),getdate(),112) + 'LW' + right(@counter+100000000,8)   --日期+序列号insert into AppointList(MedicalNo,MedicalName, DeptID,PeriodID,AppointTime,ManCreate,TimeCreate,ShiftID,SNO,Remarks,Des)values(@MedicalNo,@MedicalName, @DeptID,@PeriodID,@AppointTime,@ManCreate,@TimeCreate,@ShiftID,@SNO,@Remarks,@Descript)commit tranGO


------解决方案--------------------
探讨
主键是:MedicalNo 、DeptID 、AppointTime 、PeriodID ,怎么获取主键插入异常? 我插入同一记录,存储过程只是回滚,并没有报错


SQL code

CREATE PROCEDURE P_Appoint
@MedicalNo NVarChar (50),
@MedicalName NVarChar (50),
@DeptID NVarChar (50……

------解决方案--------------------
我建议你应该判断后再插入,而不是去获取这个错误.

主键是:MedicalNo 、DeptID 、AppointTime 、PeriodID ,怎么获取主键插入异常? 我插入同一记录,存储过程只是回滚,并没有报错


if not exists(select 1 from tb where MedicalNo = ... and DeptID = ... and AppointTime = ... and PeriodID = ... )
insert 数据
else
提示主键重复
  相关解决方案