MS SQL에서 테이블의 컬럼 중 char, varchar, text, nchar, nvarchar 및 ntext은 collation을 설정 할 수 있다.
MSDN의 설명을 보면
열에 대한 데이터 정렬을 지정합니다. 데이터 정렬 이름은 Windows 데이터 정렬 이름이나 SQL 데이터 정렬 이름이 될 수 있습니다.
이렇게 정의 되어 있습니다. 말 그대로 데이터를 정렬할 때 기준을 설정해 주는 것입니다.
그런데 문제는 이것이 설정상 변경 될 수 있는 것입니다.
CREATE TABLE tt_1
(
id INT
, name VARCHAR(10) COLLATE Korean_Wansung_CI_AS
)
GO
CREATE TABLE tt_2
(
id INT
, name VARCHAR(10) COLLATE Korean_Wansung_BIN
)
SELECT *
FROM sys.columns
WHERE OBJECT_ID('tt_1') = object_id
위와 같이 임의로 선택 할 수 있습니다.
이로써 발생 할 수 있는 문제는
SELECT *
FROM tt_1 A
INNER JOIN tt_2 B
ON A.name = B.name
메시지468, 수준16, 상태9, 줄4
equal to 작업에서의"Korean_Wansung_BIN"과(와) "Korean_Wansung_CI_AS" 간의데이터정렬충돌을해결할수없습니다.
같은 에러가 납니다.
해결 방법은 두가지 입니다.
아시겠지만 컬럼의 collate 변경입니다.
ALTER TABLE tt_2
ALTER COLUMN name VARCHAR(10) COLLATE Korean_Wansung_CI_AS
두번째는 퀴리에서 collation을 변경하는 것입니다.
SELECT *
FROM tt_1 A
INNER JOIN tt_2 B
ON A.name = B.name COLLATE Korean_Wansung_CI_AS
하지만 두번째 방법을 사용하면
Compute Scalar로 변경을 하고 Join을 하네요.
분산 환경이 아닌 경우 첫 번째 경우가 좋은 선택일 것 같습니다.
'Database > MS SQL' 카테고리의 다른 글
sp_MSforeachdb 와 sp_MSforeachtable (0) | 2011.09.28 |
---|---|
로그인과 단절된 User 찾기 (0) | 2011.09.26 |
Hyper-V 네트워크 구성 (0) | 2011.09.25 |
Windows Event Log Error 4201 (1) | 2011.03.18 |
연결된 서버 만들기 (0) | 2011.03.06 |