보통 실행하던 조인문을 하다보니 갑자기 오류가 튀어나왔다...생뚱맞게..;;;
서버 데이터 정렬 방식이 달라 '=' 연산을 할 수 없게 되었다는 오류이다.
디비를 새로 만들거나 했을때 언어형식을 한국의 경우 대부분 Korean_Wansung_CI_AS로 설치하는데
하필 Korean_Wansung_CI_AI 로 설치된 경우에 문제가 발생하게 된다. 이때문에 equal to(=)연산을 할 수 없게 된 것이다.(데이터 정렬방식의 차이로 비교자체가 되지 않으므로 ..)
해결책은? 결국 있다.
먼저 해당 디비의 언어코딩을 살펴보고 Korean_Wansung_CI_AI 으로 되어 있는것이 맞으면?
EXEC sp_helpdb '디비이름'
GO
ALTER DATABASE 디비이름
COLLATE Korean_Wansung_CI_AS
GO
해준다.
하....지.....만........두둥///////////
메시지 5030, 수준 16, 상태 2, 줄 1
작업을 수행하기 위해 데이터베이스를 배타적으로 잠글 수 없습니다.
메시지 5072, 수준 16, 상태 1, 줄 1
ALTER DATABASE가 실패했습니다. 데이터베이스 'catalogName'의 기본 데이터 정렬을 Korean_Wansung_CI_AI(으)로 설정할 수 없습니다.
이런 오류가 발생하게 되는 것이다....
구글링 결과 위와같은 오류발생은 디비에 멀티유저 속성이 활성화 되어서 그렇다고 한다.
멀티유저여서 배타잠금이 안되기 때문에 싱글유저로 바꾼다음에 데이터 정렬방식을 바꾸고
다시 멀티유저로 설정을 바꾸라는 것이다!
-- the following line sets the database to "Single User" mode
ALTER DATABASE 디비이름 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
-- the following line sets the new collation
ALTER DATABASE 디비이름 COLLATE Korean_Wansung_CI_AS;
-- the following line sets the database back to "Multi User" mode
ALTER DATABASE 디비이름 SET MULTI_USER;
이렇게 말이다...
결과는 성공이다...하..지..만...
다시 조인문을 엮으려고 하니 또 같은 오류가 나온다......왜? 이미 해당테이블은 Korean_Wansung_CI_AI 로 만들어졌기 때문이다.
여기서 해당테이블을 Korean_Wansung_CI_AS로 바꿔준다고 해결이 될까?
난 그냥 귀찮아서 테이블 지우고 다시 만들었다....데이터가 비어있었기 때문에...ㅋㅋㅋㅋ
만약 테이블에 데이터가 엄청나게 많다면?????
테이블을 Korean_Wansung_CI_AS 으로 바꿔주고 해보시길....안해봤으니 결과는 모름...ㅎㄷㄷ
테이블을 수정할때는 컬럼별로 수정해줘야 함.
예)
alter table 테이블명
alter column 컬럼명 varchar(50) Korean_Wansung_CI_AS
go
이런식으로 컬럼정보를 수정해줘야 함.(문자열 관련된 컬럼만 해주면 됨. 숫자는 상관없음.)
즐~
'MSSQL' 카테고리의 다른 글
MSSQL 튜닝업체 추천! (0) | 2011.05.25 |
---|---|
MSSQL2005 온라인인덱싱(online index) (0) | 2011.04.06 |
검색에 관하여... (0) | 2011.04.06 |
mssql group by 작은팁 (0) | 2011.04.06 |
MSSQL2005 row_number() 함수로 게시판 페이지 불러오기 (0) | 2011.04.06 |