일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- version 2
- sqlc
- mysql
- module upgrade
- shared_preload_libraries
- golang
- pg_stat_statements
- option pattern
- rc-service
- vscode
- IDX Project
- 무선 디버깅
- go
- 맥미니
- openrc
- SQL Server
- User
- elasticSearch
- 윈도우즈 터미널
- AnimatedPositioned
- opentelemetry
- otel
- docker
- Linux
- DotNet
- log
- Flutter
- Android
- user-secrets
- 옵션 패턴
- Today
- Total
CATCHV Blog
equal to 작업에서의 데이터 정렬 충돌을 해결할 수 없습니다. 본문
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 |