2010-06-08 4 views
0

그래서 여기 내 상황이 있습니다 : 우리가 수정할 수없는 공급 업체 DB와 공급 업체 응용 프로그램에서 데이터를 가져 와서 작동하는 사용자 지정 데이터베이스가 있습니다. 레코드를 공급 업체 응용 프로그램에서 가져 오면 가져올 레코드 목록에 나타나지 않습니다. 또한 가져 오지 않은 가장 최근의 250 개의 레코드 만 표시하기를 원합니다.LINQ2SQL을 사용하여 교차 db 쿼리에서 많은 수의 레코드를 제외 할 수 있습니까?

처음 시작한 항목은 사용자 지정 db에서 가져온 ID 목록을 선택한 다음 .ids (. =! idList.Contains (x))의 ID 목록을 사용하여 공급 업체 db를 쿼리하는 것입니다. .Id)) 절을 사용합니다.

2100은 SQL에 전달할 수있는 매개 변수 수의 제한이므로 2100 개의 레코드를 사용자 정의 db로 가져올 때까지 작업이 완료되었습니다. 이것이 실제로 문제가 아니라 '잘못된 버퍼'/ '심각한 오류'가 아니라는 것을 알게 된 후 ADO.Net에서보고 한 바에 따르면 내 솔루션은 원격 쿼리의 첫 번째 2000 ID를 제거한 다음 로컬 쿼리의 나머지 레코드를 제거하는 것이 었습니다.

수많은 관련성이없는 레코드를 가져와 그냥 제외 시키면 정확한 250 레코드를 얻을 수 있습니다. 매우 유쾌하지 않은 것 같습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? DB 저장 프로 시저를 수행하지 않아도됩니까?

미리 감사드립니다.

답변

0

처리중인 레코드의 수에 따라 이것은 최적의 대답이 아니지만 SQL을 강제 실행하여 메모리 내 개체로 처리 할 수 ​​있습니다. ToList() 메서드를 호출하면 SQL이 실행되고 IEnumerable로 변환됩니다.

+0

오른쪽, 아마도 가장 쉬운 방법 일 수 있지만 낭비입니다. 내 사건은 지금 당장 20,000 건이지만이 숫자는 날마다 늘어난다. 아마 당신이 몇 백 k 레코드를 치기 전까지는 큰 문제가 아니 겠지만, 벤더 데이터베이스가 벤더 애플리케이션에 의해 지속적으로 사용되고 있는지 확신 할 수 없으며, 매일 사용을 시뮬레이트하는 좋은 방법이 없습니다. – tap

+0

또한 키를 데이터베이스의 테이블로 가져 와서 거기에서 조인 할 수 있습니다. 요청시 또는 주기적으로. – Robaticus

0

내가 제안하는 것은 벤더 데이터베이스에 일종의 기준 (아마도 가장 오래된 것에서 가장 오래된 것까지)을 기준으로 결과를 정렬하는 것으로 시작하는 것입니다.

Skip()을 사용하여 결과를 "제외"한 다음 각 대량 세트를 가져 와서 ID가없는 사용자 정의 db에 삽입하십시오. 그렇게하면 지금 가지고있는 문제를 피할 수 있습니다.

+0

나중에 이것은 제가 생각한 것입니다. 그러나 벤더 db가 매일 업데이트되므로 2 dbs를 동기화 할 때 혼란이나 번거 로움을 원하지 않았습니다. 이것은 상황에 따라 실행 가능한 솔루션이지만 내 것이 아닙니다. – tap

0

공급 업체의 db가 실행되고있는 SQL Server에 대한 db-create 권한이 있거나 (사용자 지정 db가 동일한 서버에있는 경우) 다른 데이터베이스에 "가져 왔습니다"테이블을 만들 수 있습니다. 같은 서버는 다음 데이터베이스 간은 공급 업체 DB에 대해 해당 테이블의 조인 않는 저장된 프로 시저, 예를 들어 쓰기 :

select top 250 from vendordb.to_be_imported 
where not exists 
(select 1 from customdb.has_been_imported where idWasImported = idToBeImported) 
order by whatever; 

것은 당신도 Linq에 2 SQL을이 작업을 수행 할 수있을 것를 - 내가 ' 한번도 다른 데이터베이스의 객체를 하나의 DataContext에 추가하려하지 않았습니다 ...

+0

이것은 성능이 중요 할 때 가장 좋은 솔루션이 될 수 있습니다 (다시 말해서 테스트 할 수 없습니다). 그러나 크로스 db SP 없이는 할 수있는 방법이 있는지 궁금 해서요. – tap

+0

@tap 오, 그래, 그렇게 했어. - 미안. 그건 그렇고, 어떤 버전의 SQL Server를 사용하고 있습니까? 2005 년 또는 2008 년? –

관련 문제