2011-12-27 6 views
3

쿼리를 실행하지 않고 SQL Server 용 C#에서 SqlDependency을 실행할 수 있습니까?쿼리를 실행하지 않고 SqlDependency

상당히 커질 수있는 테이블이 있습니다. 행이 변경되었는지 알기 위해 테이블에서 쿼리를 실행하면 시간이 오래 걸릴 수 있습니다.

+0

해당 질문에 대답하는 데 도움이되는 사이트가 있습니다. http://msdn.microsoft.com/en-us/library/62xk7953(VS.80).aspx이 사이트에서는 필요한 경우 이벤트를 구독하는 방법을 사용자에게 보여줍니다 sqlDependency를 확인하려면 – MethodMan

+0

작동하는 SqlDependency가 설정되어 있습니다. "command.ExecuteResult()"명령을 실행하지 않고 수행 할 수있는 방법이 있는지 궁금합니다. "command.ExecuteNonQuery()"와 함께 작동하도록 설정했습니다.이 명령은 정상적으로 작동하지만 테이블에 수백만 행이 다시 실행될 때 속도가 느려집니다. – Stuart

답변

5

아니요, 아니요, SqlDependency를 실행하려면 SqlCommand가 필요합니다.

성능에 문제가있는 경우 모니터링 할 테이블에 트리거를 추가하고 행이 바뀔 때마다 추출 테이블에 쓰는 대신 SqlDependency가 추출 테이블을 모니터링하는 등의 대안 디자인에 대해 생각할 수 있습니다 .

원본 테이블에서 변경된 행이 종속성을 트리거해야하는 경우 추출 테이블은 변경된 행 수의 카운터가 포함 된 단일 행만큼 간단 할 수 있습니다. 이 값이 변경되면 종속성이 트리거됩니다.

또는 추출 테이블에는 테이블의 모든 행이 변경된 마지막 날짜/시간에 대한 시간 소인이 포함될 수 있습니다.

+0

좋아. 이것은 내가 필요한 것입니다. 감사. – Stuart

0

답변이 제대로 작동하지만 트리거를 사용할 수 없거나 원하지 않는 위치에있는 경우 대안이 있습니다.

데이터를 가져올 때마다 변경되는 매개 변수가있는 저장 프로 시저를 사용하십시오. 예를 들어 :

Alter PROCEDURE someschema.SQLDependency_DC_PRE 
    @MaxDCIdx INT = 1 
AS 

SELECT DCIdx FROM someschema.DC_PRE WHERE DCIdx >= @MaxDCIdx ORDER BY DCIdx DESC; 

는 그런 다음 쿼리는 기본 키 또는 인덱스 필드에있는만큼 다운로드 SQL을 유지해야하는, 한 행마다 돌아 확신 할 수 있습니다.