2009-12-16 8 views
1

두 파트가있는 저장 프로 시저가 있습니다. 파트 1에서 응용 프로그램으로 오류를 반환해야하며 저장 프로 시저가 반환되기 전에 파트가 완전히 실행되어야합니다.저장 프로 시저 실행이 끝나기 전에 반환

2 부는 프로 시저가 호출 될 때마다 실행해야하는 긴 프로세스이지만 모든 실패를 무시 (또는 다른 곳에서 처리) 할 수 있지만 완료되기 전에 응용 프로그램이 돌아 오기를 원합니다. 내가 SQL 서버에서이 작업을 수행하는 구문을 모르는 비록 우리가 잠재적으로는 '작업자 스레드'로이 작업을 수행 할 수 있다고 생각

exec PART1 
return 
exec PART2 -- still gets executed, but after sql server has already responded that the SP was a success to the client. 

: 그래서 우리는이 작업을 수행하는 과정이 필요합니다.

아이디어가 있으십니까? 나는 올바른 길을 가고 있는가? 이 작업을 수행하는 구문을 알고 있습니까? 이 일을 수행하는 더 쉬운 방법을 간과하고 있습니까?

답변

2

SQL Server에서 사용자가 살펴볼 수있는 것은 Implementing Jobs입니다.

아이디어는 두 개의 저장 프로 시저 중 하나가 프로그램에 의해 호출되고 그 중 하나는 작업에 의해 호출됩니다. 첫 번째 작업의 최종 작업은 작업을 실행 (또는 예약)하는 것입니다. 또한 Running Jobs

+0

고마워요! 이것은 우리가 생각한 것보다 훨씬 나은 해결책입니다. – Erich

1

SQL에서 이것이 가능하다는 소식을 듣지 않았습니다. SP를 통해 배치를 처리하려고합니다.

we find this하지만 주위에 파고 :

은 SQL Server 기본 클라이언트 OLE DB 공급자를 사용하여, 객체 비동기 데이터 소스를 초기화하도록 설계된 응용 프로그램 는 DBPROP_INIT_ASYNCH 특성에 DBPROPVAL_ASYNCH_INITIALIZE 비트를 설정할 수 있습니다 보다 먼저 IDBInitialize::Initialize으로 전화하십시오.

통증의 경로를 선택하는 것처럼 들립니다. .NET을 통해 Stored Proc를 호출하고 PART1에 설정된 조건에 따라 응용 프로그램이 PART2을 실행할지 여부를 결정할 수 있습니까?

0

첫 번째 부분에 대한 저장 프로 시저와 두 번째 트리거에 대한 저장 프로 시저를 결합 할 수 있습니다.

0

당신이 요구하는지 무엇을 할 수있는 세 가지 표준 방법이 있습니다 : 다른 SP 킥오프

  1. 큐에게 작업을 SQL 에이전트
  2. 사용 서비스 브로커 활성화 (아마 가장 좋은 건)
  3. 다음 원하는 SP를 개막 Windows 서비스에 메시지를 보내 서비스 브로커 메시지를 사용
0

일의 개입하여 w/o이 작업을 수행하는 방법을 예제 Asynchronous procedure execution를 참조하십시오 전자 SQL 스케줄러. SQL 에이전트에는 확장 성, concurency, 장애 극복 시나리오, 데이터베이스 백업/복원 일관성 및 Express Edition의 최소 비 가용성이 포함되지 않습니다. 링크의 솔루션은 Service Broker Activation 메커니즘을 활용하여 이러한 모든 문제를 해결합니다.