sourcecode

SQL Server에서 서로 다른 데이터 집합을 가진 두 데이터베이스에서 조인을 수행하고 오류가 발생하는 경우

copyscript 2023. 6. 23. 22:23
반응형

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

반응형