본문 바로가기

반응형

프로그래밍/MSSQL

(76)
[MSSQL] DECLARE 변수 선언 변수 변수란 특정 유형의 단일 데이터 값을 보유할 수 있는 개체이다. 변수 선언 DECLARE 문으로 변수를 선언한다. DECLARE @변수명 데이터 형식; -- 지역 변수 선언 DECLARE @Name VARCHAR(50); DECLARE @Age INT; -- 둘 이상의 지역 변수 선언 DECLARE @Name VARCHAR(50), @Age INT; 변수 범위는 선언된 시점부터 이를 선언했던 일괄 처리 또는 저장 프로시저가 끝날 때까지 계속된다. 변수 값 설정 변수가 처음 선언되면 그 값은 NULL로 설정된다. 변수에 값을 할당하려면 SET 문 사용한다. DECLARE @Name VARCHAR(50), @Age INT; SET @Name = 'GGMOUSE'; SET @Age = 10; 또한 변수에..
[MSSQL] 문자열이나 이진 데이터는 잘립니다 해당 칼럼의 데이터 길이보다 큰 값을 넣으려고 할 때 발생하는 오류 예제와 함께 살펴보자 varchar(10) 형식의 name 칼럼을 가진 table_ggmouse 테이블이 있다. sp_help 'table_ggmouse' 문제 상황 name 칼럼에 'my name is ggmouse'라는 값을 넣으려고 하자 다음과 같은 메시지가 반환됐다. 메시지 8152, 수준 16, 상태 14, 줄 6 문자열이나 이진 데이터는 잘립니다. INSERT INTO table_ggmouse([name]) VALUES ('my name is ggmouse') 해당 문자열의 길이는 18이다. 즉, 넣으려는 칼럼의 데이터길이보다 큰 값이다. SELECT LEN('my name is ggmouse') 해결 방법 1. 칼럼의 데이터..
[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 설..

반응형