본문 바로가기

프로그래밍80

[MSSQL]EXECUTE 후 트랜잭션 개수는 BEGIN 및 COMMIT 문 수가 일치하지 않음을 나타냅니다 sp 처리 중에 TRY CATCH 문과 트랜잭션 처리를 제대로 했는데 아래와 같은 메시지가 발생하여 여러 원인을 찾아봤습니다. "EXECUTE 후 트랜잭션 개수는 BEGIN 및 COMMIT 문 수가 일치하지 않음을 나타냅니다" 구문내에 RETURN 에 대한 점검! 필요 특히 CURSOR 순회중엔 BREAK;하자 1. SET XACT_ABORT ON; 를 상단에 기재하여 정확한 원인 현상을 찾은 방법 --> 테이블이 없거나, 구문요류 등 상황에서는 도움이 되지만 나의 경우는 도움이 되지 않았음 2. 구문내에 RETURN 에 대한 점검! --> 구문 중간에 RETRUN; 이 들어가 있었다.. 왠지 느낌상 CURSOR 돌다가 RETURN 을 만나면 이상하게 동작할 것 같고 예전에 FUNCTION 내에 FUNC.. 2023. 7. 20.
[TSQL]mssql cursor 재사용 방법 / mssql에서 조건에 맞는 데이터를 조회하는 커서를 생성하고 해당 커서를 재사용하는 방법은 없습니다. 단, 루프내에 커서를 정의, 해제 하여 동일 기능을 구현 할 수 있습니다. 아래 예시는 TEST_TBL 이라는 테이블에 목적 데이터의 조건을 변경하여 순회하는 예시 입니다. mssql 커서에는 변수 파라메터를 입력으로 쓸 수 는 없지만 변수를 지정하고 해당 변수에 값 할당을 변경 후 커서를 재 정의하는 방식으로 구현 가능합니다. 최초 시도는 open후 close 하고 변수 값을 변경한 후 다시 open 했을때 변경된 조건에 맞는 레코드를 반환 하기를 바랬지만 예상대로 동작하지 않았고 아래와 같이 구현하는 것이 유일한 방법입니다. IF EXISTS (SELECT * FROM SYSOBJECTS WHER.. 2023. 6. 20.
[MSSQL]ID 기준 데이터 복사 구문 동적 쿼리 작성 공유 / MSSQL DB에서 특정 데이터를 복사 해야하는 경우가 있습니다. 예를 들어 COL1,COL2,COL3 의 데이터를 가진 테이블에 PK가 COL1인 경우 에 INSERT INTO [TARGET_TBL] (COL1,COL2, COL3) SELECT [NEW_COL1],COL2, COL3 FROM [TARGET_TBL] WHERE COL1 = [OLD_COL1] 위와 같은 동작을 수행하는 부분입니다. 이 동작을 DB에 테이블을 조회해서 참조키 해제, 사용중인 트리거 해제 후 데이터 처리 후 이전 설정을 복원하는 구문을 공유 드립니다. USE [TARGET DB INSTANCE] SET NOCOUNT ON; IF OBJECT_ID ('TEMPDB..#TARGET') IS NOT NULL DROP TABLE.. 2023. 6. 8.
[MSSQL] TEMPDB 용량 축소, 관리 구문 SELECT 시에 TEMPDB를 많이 사용하는 케이스에서 여러 사용자가 동일한 작업을 수행 했을때 TEMPDB경합으로 인해 DB 성능이 나오지 않는 경우가 있습니다. 보통 TEMPDB는 CPU 논리프로세스개수까지 나누어 관리하는게 병합을 막을 수 있는 조치이며 경우에 따라서는 격리수준을 조정해서 해결가능했습니다. --TEMPDB경합발생 https://learn.microsoft.com/ko-kr/troubleshoot/sql/database-engine/performance/recommendations-reduce-allocation-contention --TEMPDB는 CPU개수 정도로 잡는게 좋음 --프로시저 캐시 DBCC FREEPROCCACHE GO -- Buffer Pool에 존재하는 데이터 페.. 2023. 6. 8.