Top

[MSSQL] equal to 작업에서의 "Korean_Wansung_CS_AS"과(와) "Korean_Wansung_CI_AS" 간의 데이터 정렬 충돌을 해결할 수 없습니다. | Web-Programing
안지흠 (hoomiyam) | Editor | 2013/02/08 17:19:13 | 조회:12528


equal to 작업에서의
"Korean_Wansung_CS_AS"과(와) "Korean_Wansung_CI_AS" 간의 데이터 정렬 충돌을 해결할 수 없습니다. 문제 해결 법


조인 했을 때 문제가 발생하였다.
찾아보니 mssql에 컬럼별로 속성에 데이터 정렬이 있는데 속성값이 달라서 발생한 문제였다.
여러 옵션이 있는데 그 중 2가지만 보겠다.
Korean_Wansung_CI_AS 같은 경우 테이블 생성시 default 로 잡히는 기본 값이다.
특징은 영문 대소문자를 구분하지 않는다
예로 컬럼에 Hello 란 값이 저장된 레코드와 hello 라고 저장된 레코드가 있다고 가정하자
ex : select culom from table = 'hello'
      select culom from table = 'Hello'

두개의 쿼리는 같은 값이 나온다
ex :       Korean_Wansung_CS_AS 경우는 위와 같은 쿼리 조회시 영문 대소문자를 구분하여 한 가지씩만 나온다.이런 이유로 테이블 조인할 때 충돌이 난다고 오류는 뱉는다 .
해결 방법은 2가지 있다.

NO culom
1 hello
2 Hello

 

방법 1. 조인하는 조건의 컬럼을 같은 값으로 바꾸는 법
alter table 테이블명 alter column 컬럼명  자료형(ex:varchar) COLLATE Korean_Wansung_CS_AS

방법 2.쿼리 실행시 강제로 형변환 시켜주는 법
select * from table A left outer join table2 B
ON A.컬럼명 collate Korean_Wansung_CI_AS = B.컬럼명 collate Korean_Wansung_CI_AS

그럼 문제 해결!!

공유하기
공유하기
2
0
0


댓글을 불러오는 중입니다.
▲ 이전글 [PHP] 한글 문자열 자르기 이강현 (lkhtt) 2013-02-12 18:58:24
▼ 다음글 [PHP] 일반 변수 배열 체크! 김경훈 (admin) 2013-02-06 19:58:25