1

여러 테이블에 조인하는 재귀 CTE 쿼리와 테이블을 동기화해야합니다. CTE는 실행될 때마다 다른 결과를 반환 할 수 있습니다 (조인 된 테이블에 변경 사항이있는 경우). CTE가 느리므로 트리거가 실행 된 쿼리가 트리거 될 때까지 트리거가 실행되지 않는 쿼리가 반환되기 때문에 트리거를 실행하는 데 여유가 없습니다 (단일 레코드에 대한 간단한 업데이트가 필요하지 않음). 트리거가 끝나기를 기다리고 있기 때문에 15 초). SSMS에서 솔루션을 구현하는 방법에 대한 자세한 내용은 좋지만 필요하지는 않습니다.동일한 SQL Server 데이터베이스에서 쿼리 (보기)와 테이블을 동기화해야합니다.

하나의 솔루션은 CTE를 실행하고 그 결과를 테이블과 병합하는 것입니다. 예약 된 작업은 몇 초마다 실행될 수 있으므로 테이블은 최대한 최신 상태로 유지됩니다. 그러나 Sql Server 2005에서 예약 된 작업을 만드는 방법이나 CTE 쿼리의 결과를 테이블과 병합하는 방법을 모르겠습니다.

가 어떻게이 CTE를 사용하여 가능한 한 실시간에 가까운 날짜로 테이블을 보관하지 :

내 질문을 다시 언급하려면?

+0

예약 된 작업은 최대 몇 초마다 실행될 수 있습니다. 나는 그 대답이 서비스 중개자 대기열에 관련되어 있다고 생각한다. 테이블이 만료 된 데이터를 반환하는 경우 얼마나 중요합니까? 테이블이 아직 동기화되지 않은 경우 '선택'을 차단해야합니까? –

+0

아니요. 테이블을 선택 가능한 상태로 유지하는 것이 훨씬 낫습니다. 그것은 매우 빠른 요구 사항입니다. 동기화 시간이 끝나면 ... 1 ~ 2 분 정도면 동기화가 가능합니다. –

답변

0

나는 그것을 스스로 알아 냈습니다. 아주 멋진 tablediff.exe 유틸리티와 함께 ​​SQL Server Agent를 사용하여 tablediff 유틸리티에 의해 생성 된 upsert/delete 문을 사용하여 뷰와 테이블을 동기화 상태로 유지할 수있었습니다. 뷰에 임시 테이블과 고유 한 열이 있어야합니다.이 열은 2 개의 열 ID를 하나씩 연결하여 만들었습니다 (고유하게 만들 수 있음을 알았습니다).

라이브 테이블을 자르거나 삭제하고 임시 테이블의 이름을 바꿀 필요가 없었기 때문에 훨씬 더 나은 솔루션이었습니다. 게다가 그것은 자신의 쓰레드/환경에서 실행되기 때문에 실행하는 데 분이 걸리면 (항상 대용량 인 트리거를 사용하는 것보다) 괜찮습니다.

자세한 내용을 알고 싶으면 알려 주시면이 기사를 업데이트하겠습니다.

+0

이 작업을 시작하는 방법에 대한 코드를 게시 할 수 있습니까? – Omar

관련 문제