2011-12-27 2 views
5

문제를 해결하는 가장 좋은 방법을 찾는 데 어려움이 있습니다.이 작업을 수행하는 더 좋은 방법에 대해 알고 있습니다.테이블 업데이트 트리거를 비동기 적으로 실행 한 후 SQL Server에서 콘솔 응용 프로그램을 실행 하시겠습니까?

테이블의 행 값을 업데이트 한 후 해당 테이블의 2 개 필드를 콘솔 응용 프로그램의 매개 변수로 사용해야합니다. 지금은 테이블에 트리거를 설정 한 다음 xp_cmdshell을 사용하여 매개 변수로 응용 프로그램을 실행함으로써이를 수행 할 수 있습니다. 그러나 콘솔 응용 프로그램이 끝날 때까지 기다리는 동안 내 저장 프로 시저가 중단되지 않도록이 작업을 비동기 적으로 수행해야합니다.

아마도 내가 잘못된 방향으로 가고 있습니다.

내가 SQL 서버 2008

편집을 사용하고 있습니다 - 안드리 M에 의해 대답은 가장 좋은 것 같다 현재 그러나 나는이 "즉시"일어날 수 있도록하는 방법이 필요 코멘트에 명시된 바와 같이. SP 또는 트리거에서 작업을 호출 할 수 있습니까? 비슷한 결과를 얻으려면 다른 방법이 있을까요?

모두에게 도움을 주셔서 감사합니다.

편집 - 내가 가장 좋은 해결책을 찾는데 도움이되었으므로 아래의 답을 선택합니다. 내가 끝내는 것은 업데이트 된 행을 추적하는 다른 테이블에 대해 내 테이블을 쿼리하는 작업을 만드는 것입니다. 다음 행을 업데이트 할 때 xp_cmdshell을 사용하여 지정된 매개 변수로 내 응용 프로그램을 실행합니다. 이 솔루션은 지금까지 원활하게 작동하는 것 같습니다.

+0

신청서는 무엇을합니까? – UnhandledExcepSean

+0

내 테이블에서 업데이트 된 값을 기반으로 일부 일괄 작업을 수행하므로 그다지 자세히 설명 할 수 없습니다. – kds6253

+0

데이터베이스 외부에서 수행해야 할 작업이 있습니까? – UnhandledExcepSean

답변

5

응용 프로그램을 트리거에서 직접 실행하는 데에는 또 다른 단점이 있습니다. 일반적으로 하나 이상의 행이 업데이트 될 수 있다는 사실과 관련이 있습니다. 트리거에서이를 설명하려면 업데이트 된 행에 대한 루프를 구성하고 각각에 대해 개별적으로 응용 프로그램을 실행해야합니다. 커서는 일반적으로 최후의 수단으로 간주되며 트리거에있는 커서는 더욱 그렇습니다.

이와 같은 상황에서 트리거를 통해 채워진 전용 테이블에서 업데이트 된 값을 읽는 SQL 에이전트 작업을 만드는 것이 가장 좋습니다. 작업은 여전히 ​​커서를 사용해야하지만, 트리거는 그렇지 않을 것이고, 요점은 작업에서 응용 프로그램을 실행해도 주 작업 프로세스가 멈추지 않는다는 것입니다.

+0

이것은 최상의 해결책 인 것 같습니다. 트리거는 테이블을 쿼리하고 매개 변수에 대한 정보를 얻은 다음 작업 내의 xp_cmdshell에서 내 app.exe를 실행해야하는 작업을 호출합니다. – kds6253

+0

누구든지이 논리 또는 가능한 개선에 문제가 있습니까? – kds6253

+0

@ kds6253 : SQL 작업을 처리하는 데 능숙하지 않습니다. 특히 트리거에서 작업을 호출하는 것에 대해 들어 본 적이 없습니다. 나는 단지 특정 테이블을 채우는 방아쇠에 대해서만 생각하고있었습니다. 내가 언급 한 직업은 일정에 따라 달리고 테이블을 폴링한다. 새로운 행이 발생하면 모든 행에 대해 하나씩 차례로 애플리케이션을 호출하기 시작합니다. 방아쇠를 당겨서 * 직접 * 작업을 시작할 수 있으면 좋은 보너스라고 생각합니다. –

0

xp_cmd_shell을 사용하여 콘솔 응용 프로그램을 호출하는 대신 확장 저장 프로 시저 (DLL)를 개발해야한다고 생각합니다.

+0

확장 저장 프로 시저에 대한 대안이 있습니까? – kds6253

+1

[확장 저장 프로 시저 프로그래밍이 필요하지 않습니다] (http://msdn.microsoft.com/en-us/library/ms143729.aspx) –

+0

나는 그것을 알지 못했습니다. 감사. – Baatar

0

CLR 절차를 사용하는 것이 좋습니다. 프로세스에 대해 훨씬 더 많은 제어권을 제공하기 때문입니다. 하지만 xp_cmdshell으로 처리 할 수 ​​있습니다.

이렇게하려면 xp_cmdshell과 함께 호출 할 배치 파일을 작성할 수 있습니다. 배치 파일 내에서 START 명령을 사용하여 콘솔 응용 프로그램을 적절한 매개 변수로 시작하십시오. 이렇게하면 프로세스가 비동기 적으로 실행됩니다. 일} 처리 파일 W xp_cmdshell 호출은 즉시 리턴합니다.

+0

CLR 프로 시저를 작성하고 등록하는 예제는 여기에서 할 수있는 것 이상입니다. 온라인에서 좋은 예가 있습니다. 'START '트릭이 작동하지 않으면'AT' 프로그램을 시도해 볼 수도 있습니다. 이 기능을 사용하여 앞으로 실행할 작업을 예약 할 수 있습니다. 당신이 그것을 설정한다면, 말하자면, 앞으로 2 ~ 2 초가 걸릴 것입니다. 하지만 이러한 xp_cmdshell 접근법 중 하나는 해킹이라고 강조합니다. 가능한 경우 문제의 근본적인 설계를 실제로 살펴 봐야합니다. – mwigdahl

1

트리거 될 때 업데이트 된 각 행의 Service Broker 큐에 메시지를 넣습니다. 큐에서 메시지를 처리하는 저장 프로 시저를 작성합니다. 저장 프로 시저를 큐의 활성화 저장 프로 시저로 설정하십시오.

관련 문제