어떤 이유에서 테이블 컬럼 별 COLLATE가 다르게 셋팅되어 WHERE 절에서 에러가 발생합니다.
1 | System.Data.SqlClient.SqlException: equal to 작업에서의 "Korean_Wansung_CI_AS" 과(와) "SQL_Latin1_General_CP1_CI_AS" 간의 데이터 정렬 충돌을 해결할 수 없습니다. |
1 2 3 | SELECT A.a , B.b FROM tblA as A , tblB b WHERE A.a COLLATE Chinese_PRC_CI_AS = B.a COLLATE Chinese_PRC_CI_AS |
테이블 및 디비 Collation을 변경 또는 확인하기 위해서는 아래와 같이 가능합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SELECT * FROM ::fn_helpcollations() -- 사용 가능한 Collation 확인 GO SELECT SERVERPROPERTY( 'collation' ) -- 현재 Collation 정보 확인 GO SELECT name , collation_name FROM sys.columns -- 컬럼 별 Collation 정보 검색 where Collation_name is not null order by Collation_name GO -- 변경 방법 ALTER TABLE 테이블명 ALTER COLUMN 칼럼명 VARCHAR (50) COLLATE 변경할 Collation GO |
변경 중 에러 아래와 같은 에러 발생시
1 2 3 4 | 서버: 메시지 5074, 수준 16, 상태 8, 줄 1 개체 'pk_테이블명은' 은(는) 열 '칼럼명' 에 종속되어 있습니다. 서버: 메시지 4922, 수준 16, 상태 1, 줄 1 하나 이상의 개체가 이 열을 액세스하기 때문에 ALTER TABLE ALTER COLUMN '칼럼명' 이(가) 실패했습니다. |
기본키 제거 -> Collation 변경 -> 기본키 재생성 순으로 하시면 됩니다.
참고 url
SSISO Community