2013-05-14 1 views
0

저장 프로 시저에서 Excel 데이터를 가져 와서 임시 테이블에 레코드를 저장하려고합니다. 마스터 테이블에서 해당 값을 사용하여 몇 개의 열의 값을 확인하려고합니다.효율적인 방법으로 열 값을 해당 마스터 테이블 값과 일치 시키십시오.

이 임시 테이블에 하나 이상의 열을 추가했습니다 : 상태 : NULL 또는 SKIP 값을 보유하는 상태.

예를 들어, 임시 테이블에는 위치라는 하나의 열이 있습니다. 고객은 미리 채워진 Excel 시트를 모든 컬럼이 채워진 상태로 보내드립니다. 해당 열에는이 위치 열이 있습니다. 종종 위치의 철자가 정확하지 않습니다. 어떤 위치가 뉴저지라고하면 Excel 시트에 New Jarsey라는 철자가 포함될 수 있습니다.

정확한 위치 및 ID 이름을 저장하는 위치 마스터 테이블이 있습니다. 임시 테이블의 위치 이름을 마스터 테이블의 해당 위치 이름과 일치 시키려고합니다. 위치가 일치하지 않으면 임시 테이블에서 Status 열을 SKIP으로 표시합니다.

임시 테이블에 값이 해당 마스터 테이블 값과 일치해야하는 여러 열이 있습니다.

이러한 열 값을보다 효율적이고 빠르게 검증 할 수있는 방법이 있습니까? 위치와 행 및 유사하게 다른 열 값을 일치시키고 싶습니다.

+0

실제 비즈니스 요구 사항 **과 해결 방법 **을 설명하십시오. –

답변

0

올바르게 이해하면 (실제로 일부 테스트 데이터가 표시되고 예상되는 결과가 많이 도움이 됨) 일련의 EXISTS 표현식이나 일련의 외부 조인을 사용할 수 있습니다.

-- set up test data 
declare @RawData table (Location varchar(100) not null primary key, Country varchar(100) not null, Status char(4) null) 
declare @LocationMaster table (Location varchar(100) not null primary key) 
declare @CountryMaster table (Country varchar(100) not null primary key) 

insert into @RawData (Location, Country) values ('New Jersey', 'USA'), ('New Jarsey', 'USA'), ('New York', 'USAA'), ('New Yoik', 'United States') 
insert into @LocationMaster (Location) values ('New Jersey'), ('New York') 
insert into @CountryMaster (Country) values ('USA') 

-- option 1: EXISTS 

update @RawData 
set Status = 'SKIP' 
from @RawData r 
where 
    not exists (select * from @LocationMaster where Location = r.Location) 
    or not exists (select * from @CountryMaster where Country = r.Country) 

select * from @RawData 

-- reset status 
update @RawData set Status = null 

-- option 2: OUTER JOIN 

update @RawData 
set Status = 'SKIP' 
from 
    @RawData r 
    left outer join @LocationMaster lm on lm.Location = r.Location 
    left outer join @CountryMaster cm on cm.Country = r.Country 
where 
    lm.Location is null 
    or cm.Country is null 

select * from @RawData 

당신은 데이터 세트에 대한 더 효율적입니다 어느 결정 SSMS에서 모두 계획을 프로파일 링 할 수 있습니다 : 여기에 2 개의 다른 열, 해당 '마스터 테이블'각을 사용하여 예입니다.

관련 문제