次のような非常に単純な 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 になります)。
この動作の原因は何ですか? エラー時に必要な値を選択して返す方法はありますか?