연결된 서버를 통해 조인해야하는 테이블이 두 개 있지만 현재 원본 데이터에 문제가 있습니다.다른 데이터 형식의 두 열을 비교하는 가장 빠른 방법
가입해야하는 열 이름은 각각 account_number
및 member_number
입니다.
내 문제가 account_number
가 varchar(10)
이며 항상 앞에 0으로 채워되어 있지만 member_number
인 varchar(12)
(마지막 2가 사용되지 않습니다 왜 요구하지 않는다)하지만, 앞에 0으로 채워되지 않습니다. 우리가 account_number
가 A
에 있으며 member_number
이 B
에, 나는 다음과 같은 해결책을 온 것을 말한다면
:
SELECT * FROM
A INNER JOIN B
ON CAST(A.account_number AS BIGINT) = CAST(B.member_number AS BIGINT)
및
SELECT * FROM
A INNER JOIN B
ON A.account_number = RIGHT('0000000000'+B.member_number, 10)
문제는 그들이 슈퍼 슬로우 있다는 것입니다 !
함수가 테이블 스캔을 강제해야한다는 사실이 틀림 없지만이 작업에 대해 더 이상 확신 할 수 없습니다. 이 비교를 더 빨리 할 수있는 방법이 있습니까? 어쩌면 like
또는 일부 변형이 있습니까?
원격 서버의 통계에 액세스 할 수있는 권한이 충분하지 않다고 생각하십니까? 어떤 버전의 SQL Server? –
@MitchWheat 이것은 SQL Server 2012 – LukeP
서비스 팩입니까? ... –