본문 바로가기

반응형

프로그래밍

(162)
[MSSQL] LEN / DATALENGTH (문자열의 문자 수 / 바이트 수) LEN - 후행 공백을 제외하고 지정된 문자열 식의 문자 수를 반환 DATALENGTH - 식을 표시하는 데 사용된 바이트 수를 반환 1. 선행 공백, 후행 공백 SELECT LEN('ABC ') AS 'len', LEN(' ABC') AS 'len', DATALENGTH('ABC ') AS 'datalength', DATALENGTH(' ABC') AS 'datalength' 2. 한글 - 일반 문자형은 문자당 1바이트의 저장 공간 사용 - 유니코드는 문자당 2바이트의 저장 공간 사용 SELECT LEN('꽁쥐') AS 'len', DATALENGTH('꽁쥐') AS 'datalength' 3. NULL SELECT LEN(NULL) AS 'len', DATALENGTH(NULL) AS 'datalen..
[MSSQL] WITH INDEX 인덱스 강제 설정 (테이블 힌트) WITH INDEX 인덱스 강제 설정 먼저, 인덱스에 대해 간단히 설명해보면 - 인덱스란 지정 칼럼을 기준으로 일종의 목차를 생성하는 것이다. (조회 성능 향상) - MSSQL은 비용기반 옵티마이저를 사용한다. 비용 기반이란 데이터의 통계에 따라 실행계획이 세워지는 것 - 인덱스를 생성해놓은 테이블은 옵티마이저에서 자동으로 선택하여 인덱스를 사용한다. (단, 특정 쿼리의 경우 인덱스가 정상적으로 사용되지 않을 수 있음) 이렇게 옵티마이저가 최적의 인덱스를 찾아 사영하지만, 가끔 엉뚱한 인덱스를 타거나 테이블을 풀스캔 하는 경우가 발생한다. 자 그럼 본격적으로 내가 원하는 인덱스를 강제로 설정해보자 FROM 테이블 뒤에 WITH (INDEX(인덱스명))을 사용하면 된다. SELECT 칼럼 FROM 테이블 ..
[MSSQL] ARITHABORT (웹 서비스단 프로시저 timeout 이슈) [MSSQL] RECOMPILE 저장 프로시저 리컴파일 (c# 프로시저 timeout 에러) 위의 글에서 설명하듯이 웹 서비스단에서 호출된 프로시저에서 timeout 이슈가 발생했다. 그런데 해당 프로시저를 SSMS에서 호출시켜보니 0초도 안돼서 결과가 나오는게 아닌가.. 당시 RECOMPILE을 통해 해결한 줄 알았으나.. 아니었다.. 해당 문제는 지금 설명할 ARITHABORT로 해결했다. +추가 해결되지 않았습니다... 글 하단 참고 웹서비스 단에서 호출되는 프로시저의 실행계획과 DB툴(SSMS)에서 호출되는 프로시저의 실행계획이 상이할 수 있다. > 웹서비스 단에서 호출된 프로시저는 ARITHABORT 설정 값이 OFF (.NET) > DB툴(SSMS)에서 호출된 프로시저는 ARITHABORT 설..
[MSSQL] RECOMPILE 저장 프로시저 리컴파일 (c# 프로시저 timeout 에러) recomplie에 대해 알아보기 전에 먼저 c# 프로시저 timeout 에러 상황에 대해 설명해보겠습니다. 저장 프로시저를 호출하는 c# 코드에서 timeout 에러가 발생했다. 그런데.. 해당 저장 프로시저를 SSMS에서 실행해보니, 0초도 안돼서 결과를 뱉어낸다. 파라미터 값마저 동일하게 해봐도 똑같다. 도대체 이게 무슨 상황인지..? 이 상황은 RECOMPLIE을 통해 해결할 수 있었습니다. recomplie 방법은 3가지이고, 저는 첫 번째 방법으로 해결하였습니다. 1. 프로시저에 RECOMPILE 쿼리 힌트 CREATE PROCEDURE dbo.USP_FOOD_LIST ( @id INT ) WITH RECOMPILE AS BEGIN ... 쿼리문 END 2. WITH RECOMPILE 옵션 E..
[MSSQL] NOT MATCHED BY SOURCE ('DELETE' 유형의 동작은 MERGE 문의 'WHEN NOT MATCHED' 절에 사용할 수 없습니다.) MERGE [MSSQL] MERGE를 사용하여 데이터 입력/수정/삭제를 한 번에 처리 [MSSQL] MERGE를 사용하여 데이터 입력/수정/삭제를 한 번에 처리 데이터 입력/수정/삭제를 한 번에 처리할 수 있는 MERGE에 대해 알아보자 MERGE 단일 문에서 여러 DML(INSERT, UPDATE, DELETE) 작업을 수행할 수 있다. 즉, 여러 개의 개별 DML문을 단일 문으로 대체할 수 있다... ggmouse.tistory.com MERGE 구문 수행 도중 다음과 같은 오류가 발생했다. 이를 해결해보자! 메시지 10710, 수준 15, 상태 1, 줄 5 'DELETE' 유형의 동작은 MERGE 문의 'WHEN NOT MATCHED' 절에 사용할 수 없습니다. 'UPDATE' 유형의 동작은 MER..

반응형