MSSQL Error) ntext 데이터 형식은 비교할 수 없으므로 DISTINCT로 선택할 수 없습니다.

반응형

개요

컬럼의 중복된 값을 조회하지 않기 위해 SELECT 구문에 DISTINCT 키워드를 추가하였다.

그런데 다음과 같은 오류가 출력되었다.

Msg 421, Level 16, State 1, Line 76
ntext 데이터 형식은 비교할 수 없으므로 DISTINCT로 선택할 수 없습니다.

 

확인해보니 컬럼의 데이터타입이 ntext로 되어있다.

이 오류가 왜 발생했고, 어떻게 해결하는지 알아보자.

 

발생 원인

ntext 데이터타입은 SQL Server에서 직접적으로 비교하는 DISTINCT, GROUP BY와 같은 비교 연산자와

UNION, EXCEPT 같은 집합 연산과 COUNT, SUM과 같은 집계 함수(집계 연산)을 수행할 수 없다.

 

집합 연산을 수행할 경우에는 다음과 같은 오류 메시지가 출력된다.

Msg 5335, Level 16, State 1, Line 97
데이터 형식 ntext은(는) 비교할 수 없으므로 UNION, INTERSECT 또는 EXCEPT 연산자의 피연산자로 사용할 수 없습니다.

 

집계 연산을 수행할 경우에는 다음과 같은 오류 메시지가 출력된다.

Msg 8117, Level 16, State 1, Line 86
max 연산자에 대한 피연산자 데이터 형식 ntext이(가) 잘못되었습니다.

 

해결 방법

CAST 또는 CONVERT를 사용하여 데이터 타입을 비교할 수 있도록 nvarchar 타입으로 변환하면 된다.

/* TABLE NAME 	: t1
    COLUMNS     : col1 (ntext)
*/
SELECT DISTINCT
	CONVERT(NVARCHAR(MAX), col1)
FROM
	t1

 

혹시라도 데이터 타입을 변환하였을 때 데이터의 손실(문자 타입 변경으로 인한)이 우려된다면 걱정하지 않아도 된다.

ntext, nvarchar 모두 유니코드를 지원하므로 문자 집합의 차이로 인한 데이터 손실은 없다.

반응형