IT TIP

SQL Server에서 데이터 정렬이 다른 두 데이터베이스에서 조인을 수행하고 오류가 발생 함

itqueen 2020. 12. 13. 11:37
반응형

SQL Server에서 데이터 정렬이 다른 두 데이터베이스에서 조인을 수행하고 오류가 발생 함


나는 내가 놀라지 말아야 할 질문에 내가 쓴 것을 알고 있습니다. 하지만 내 상황은 상속 된 POS 시스템에서 천천히 작업하고 있으며 전임자는 분명히 JOIN을 인식하지 못했기 때문에 60 초 동안로드되는 내부 페이지 중 하나를 살펴보면 상당히 빠르다는 것을 알았습니다.이 8 개의 쿼리를 하나로 다시 작성하십시오. JOIN 상황으로 쿼리합니다. 문제는 JOIN에 대해 알지 못하는 것 외에도 여러 데이터베이스에 대한 페티쉬와 놀랍게도 다른 데이터 정렬을 사용하는 것 같습니다. 문제의 사실은 우리는 영어를 사용하는 사람들이 전체 알파벳을 고려할 "정상적인"라틴 문자를 모두 사용하고이 모든 것이 몇 달 내에 사용되지 않을 것이므로 반창고 만 있으면됩니다.

간단히 말해서 두 데이터베이스의 두 필드를 비교할 수 있도록 단일 데이터 정렬로 캐스트하는 방법이 필요하다는 것입니다.

정확한 오류는 다음과 같습니다.

같음 연산에서 "SQL_Latin1_General_CP850_CI_AI"와 "SQL_Latin1_General_CP1_CI_AS"간의 데이터 정렬 충돌을 해결할 수 없습니다.


쿼리에서 collate 절을 사용할 수 있습니다 (지금은 예제를 찾을 수 없으므로 구문이 잘못되었을 수 있습니다. 올바른 방향을 가리 키기를 바랍니다)

select sone_field collate SQL_Latin1_General_CP850_CI_AI
  from table_1
    inner join table_2
      on (table_1.field collate SQL_Latin1_General_CP850_CI_AI = table_2.field)
  where whatever

일반적인 목적은 데이터 정렬을 DATABASE_DEFAULT로 강제하는 것입니다. 이렇게하면 변경 될 수있는 데이터 정렬 이름의 하드 코딩이 제거됩니다.

또한 임시 테이블 및 테이블 변수 및 서버 데이터 정렬을 알 수없는 경우에 유용합니다 (예 : 시스템을 고객의 서버에 배치하는 공급 업체).

select
    sone_field collate DATABASE_DEFAULT
from
    table_1
    inner join
    table_2 on table_1.field collate DATABASE_DEFAULT = table_2.field
where whatever

참고 URL : https://stackoverflow.com/questions/2290753/doing-a-join-across-two-databases-with-different-collations-on-sql-server-and-ge

반응형