Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Garmin Chronos
- 서울 홍어삼합
- 신대방삼거리역 흑산도홍어
- 러너
- 신대방삼거리역 홍어
- MongoDB foreach
- 신설동역 맛집
- 10k 마라톤
- github command
- 가민 크로노스 러닝
- 가민 크로노스
- 가민 크로노스 인터벌 러닝
- 의정부시청역 콩나물국밥
- 인터벌러닝
- 가민
- java 알고리즘
- 의정부 콩나물국밥 맛집
- Running 연습
- 알고리즘
- java lombok
- 의정부 전주본가
- 서울 흑산도홍어
- lombok
- 의정부역 콩나물국밥
- 마라톤
- MongoDB mongoimport
- 10KM 러닝
- 인터벌 러닝
- 의정부 전주콩나물국밥
- 가민 인터벌 러닝
Archives
- Today
- Total
나의 Winding Road
SQL Server SP Transaction 쿼리 본문
[2018-08-15 수요일]
* 내용: SQL Server SP Transaction 쿼리 예시
1. 자료 확인 및 쿼리 작성
1) 참고 자료
2) 작성 쿼리
2. 확인
1. 자료 확인 및 쿼리 작성
1) 참고 자료
* URL : https://code.i-harness.com/ko/q/9436c6
2) 작성 쿼리
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | USE [XXXXX] GO /****** Object: StoredProcedure [dbo].[XXXXX] Script Date: 2018-03-13 오후 4:18:15 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ========================================================================================================================================================= -- Author: XXXXX -- Create date: 2018.02.06 -- Update date: 2018.02.06 -- Update Log: -- 1. [2017.02.21] 최초 생성 -- 2. [2017.03.09] 라인 수 검증 로직, 계정코드 값 검증(값이 할당 X) 로직 삽입 -- Description: 전표 생성 및 예산 차감 TRANSACTION -- Execution: -- exec XXXXX @YYYY=2017,@MM=10,@DeptID=N'XXXXX',@FUser=16082,@XBLNR=147221,@gubun='XXXXX',@LINE_CNT=3 -- ========================================================================================================================================================= ALTER PROCEDURE [dbo].[XXXXX] ( @YYYY smallint -- 회계년 , @MM smallint -- 회계월 , @DeptID nvarchar(24) -- 부서코드 , @FUser int -- 등록자 , @XBLNR int -- 가전표번호 , @gubun varchar(100) , @LINE_CNT INT -- TSLIP_D 라인 수 ) AS BEGIN DECLARE @ERR_MSG NVARCHAR(500) SET @ERR_MSG = '' /* A. 라인 수 검증 로직 */ IF ( @LINE_CNT <> ( SELECT COUNT(BUZEI) FROM SLIP_D_TRAN WHERE XBLNR = @XBLNR ) ) BEGIN SET @ERR_MSG = '' SET @ERR_MSG += '가전표 생성 중 오류(가전표 라인 수)가 발생하였습니다. 오류가 계속 발생할 시 시스템 관리자에게 문의해주세요.' RAISERROR(@ERR_MSG, 16, 1) -- C# 프로그램 try-catch 로직에서 catch문으로 이동하여 정의된 Rollback 로직 수행 END /* B. 계정코드 검증 로직 */ (중략....) BEGIN TRY /* TRANSACTION 시작 */ DECLARE @START_TRAN_CNT INT SET @START_TRAN_CNT = @@TRANCOUNT /* TRANSACTION 시작 */ IF @START_TRAN_CNT > 0 -- 기존에 실행되던 TRANSACTION이 있는 경우 중단점 설정 BEGIN SAVE TRANSACTION SAVE_TRAN END ELSE -- 기존에 실행되던 TRANSACTION이 없는 경우 BEGIN BEGIN TRANSACTION END /* 1. 전표 헤더 삽입 */ INSERT INTO SLIP_H ( BUKRS , BUDAT , BLDAT , BLART , XBLNR , BKTXT , WAERS , KURSF , FUser , SLPGB , DeptId , BG_SEQ , VNDOR , OefYN ) SELECT BUKRS , BUDAT , BLDAT , BLART , XBLNR , BKTXT , WAERS , KURSF , FUser , SLPGB , DeptId , BG_SEQ , VNDOR , OefYN FROM SLIP_H_TRAN WITH(NOLOCK) WHERE XBLNR = @XBLNR (중략....) /* 7. TEMP DB DROP */ DROP TABLE #TMP_SLIP_D_3 DROP TABLE #TMP_SLIP_D_1 /* COMMIT */ IF @START_TRAN_CNT = 0 -- 기존에 실행되던 TRANSACTION이 없는 경우 BEGIN COMMIT TRANSACTION END END TRY BEGIN CATCH IF @START_TRAN_CNT = 0 -- 기존에 실행되던 TRANSACTION이 없는 경우 BEGIN ROLLBACK TRANSACTION END ELSE IF XACT_STATE() <> -1 -- 기존에 실행되던 TRANSACTION이 없는 경우 BEGIN ROLLBACK TRANSACTION SAVE_TRAN END IF (@ERR_MSG <> '') -- 로직 오류 BEGIN RAISERROR(@ERR_MSG, 16, 1) END ELSE -- SQL 오류 BEGIN DECLARE @ErrorMessage NVARCHAR(4000) DECLARE @ErrorSeverity INT DECLARE @ErrorState INT SELECT @ErrorMessage = ERROR_MESSAGE() SELECT @ErrorSeverity = ERROR_SEVERITY() SELECT @ErrorState = ERROR_STATE() RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState) INSERT INTO SQL_ERROR_LOG SELECT ERROR_NUMBER() , ERROR_SEVERITY() , ERROR_STATE() , ERROR_PROCEDURE() , ERROR_LINE() , ERROR_MESSAGE() , GETDATE() END END CATCH END | cs |
2. 확인
* Rolback 및 Commit 여부 확인
- select 1 / 0 과 같은 에러 발생 시 정상 Rollback 실행 여부 확인
'개발 > Database' 카테고리의 다른 글
SQL Server CASE WHEN 자동 형변환 확인 (0) | 2018.08.30 |
---|---|
SQL Server Database 복원(Restore) (0) | 2018.08.17 |
SQL Server 에러 처리(명명된 파이프 공급자: SQL Server에 대한 연결을 열 수 없습니다.) (0) | 2018.08.16 |
SQL Server Database 이름 변경 (0) | 2018.08.15 |
Hostinger MySQL sql file 가져와 로컬에 복사하기 (0) | 2016.06.17 |
Comments