我有一个非常简单的 SP,如下所示:
BEGIN
SET @CUR_IO_GB = @IO_GB
SET @CUR_TOTDATE = @TOTDATE
SET @CUR_TOT_NO = @TOT_NO
SET @CUR_TOT_NO_SEQ = @TOT_NO_SEQ
SET @CUR_CUS_CD = @CUS_CD
SET @CUR_MAT_CD = @MAT_CD
SET @CUR_JCOLOR = @JCOLOR
SET @CUR_CANCEL_YN = @CANCEL_YN
SET @CUR_CREQTY = @CREQTY
SELECT @ERR_MSG = 2
PRINT 'INSERTING'
INSERT INTO LC_OUT_REQUEST_DETAIL(IO_GB, TOTDATE, TOT_NO, TOT_NO_SEQ,
LOCCD, ALLOC_QTY, OUT_QTY, IN_EMP, IN_DATE, UP_EMP, UP_DATE,
CUS_CD, MAT_CD, JCOLOR, CANCEL_YN, DELIVERY_YN, OUT_YN, JDANGA)
VALUES('021', '20130817', '000001', '000001',
'A0021', 2, 2, 'BATCH4', GETDATE(), 'BATCH4', GETDATE(),
'0001031080', '41183', '1090', '1','1', 'N', 15 )
PRINT @ERR_MSG
SELECT @ERR_MSG = 2
RETURN @ERR_MSG
END
出于测试目的,我故意尝试通过插入重复键来破坏上述存储过程,从而导致主键违规。
我的问题是,我期望 ERR_MSG 中的结果为 2,即使出现错误(例如,打印 @ERR_MSG 给我 2,但选择 @ERR_MSG = 2 然后返回它总是给我 null)。
这种行为的原因是什么?有什么方法可以让我在出错时仍然选择并返回所需的值?