2012-06-26 3 views
0

나는 경매 웹 응용 프로그램을 작성 중입니다.트리거 처리 SQL Server

모든 경매에는 종료일이 있습니다. 그 시간이 끝나면 알고리즘을 기반으로 승자가 결정됩니다.

나는 datetime 종료 직후 승자를 결정하는 방법을 찾으려고합니다.

간격으로 작업을 수행하는 상담원을 예약 할 수 있습니다. 그러나 나는 끝 날짜 시간이 끝난 직후에 프로세스를 시작하는 것을 좋아합니다.

이 작업을 수행 할 수있는 방법이 있습니까?

답변

1

SQL Server에는 Service Broker라는 것이 있습니다. 나는 알고리즘을 계산할 필요가있는 reocrd를 식별하고이를 처리하기 위해 서비스 브로커에 보내는 작업을 확인하기 위해 몇 초마다 실행되도록 작업을 스케줄 할 수 있다고 생각합니다. 처리 과정에서 우승자를 계산하여 우승자와 경매에 아이템을 올린 사람에게 알립니다. Bookds Online에서 Service BRoker를 읽으십시오. 귀하가해야 할 일에 대해 매우 편리 할 것입니다.

0

경매 종료 날짜 이후에 한 번만 에이전트 작업을 시작하도록 예약하십시오.

0

정기적으로 경매를 확인하는 .Net 앱이 최선의 선택 일 수 있지만 5 분마다 실행되는 작업을 사용하고 다음 5 분 이내에 종료 할 경매를 확인하고 WinnerAlgorithm proc WAITFOR DELAY 수정자를 사용합니다. 작업은 5 분의 시간 프레임으로 끝나는 모든 경매를 캡처하는 여러 비동기 작업을 해고 할 수 있도록해야합니다

SELECT ID FROM Auction WHERE AlgorithmIsSet = 0 and AuctionEnd < DATEADD(minute, 5, GETDATE()); -- to pull the ones you need to process 

UPDATE Auction SET AlgorithmIsSet = 1 WHERE ID = 12345; -- to mark that this one is taken care of. 
WAITFOR DELAY "00:04:23"; -- the exact time until the auction ends - you'll need to construct this from DATEDIFF(second, AuctionEnd, GETDATE()) 
EXEC WinnerAlgorithm; -- after the wait time, the auction is closed and the winner determined. 

이 즉시 경매가 종료로 프로세스 실행을 할 수 있습니다. 나는 5 분마다처럼 규칙적으로 작업을 수행하고, 에이전트 서비스가 실행을 멈추거나 머신이 재부팅되면 첫 번째 SELECT 문은 이미 처리되지 않은 항목을 모두 가져옵니다. 입찰가에 타임 스탬프를 찍는 한 사실 이후에 항상 우승자를 재구성 할 수 있습니다.

0

경매가 끝나면 우승자가 결정됩니다. 귀하의 질문은 당신이 뭔가 할 경우 경매가 끝날 때 뭔가 예를 들어. 승자에게 알리십시오.

데이터베이스 또는 Windows 서비스에 입찰을 삽입하는 응용 프로그램은 다음 경매가 종료 될 때 만료되도록 타이머를 유지 관리 할 수 ​​있습니다. 그것은 깨우고, 완료된 모든 경매를 처리하고, 다음 경매 만료를 결정하고 타이머를 다시 설정합니다.

+0

mssql 용 타이머? mssql이있는 타이머가 있습니까? – user1255409

+0

@ user1255409 - SQL Server는 일정 기간 동안 또는 특정 날짜/시간까지 '대기'할 수 있습니다. 그렇다고 제안 된 문제를 해결하는 데 도움이되지는 않습니다. "다음"경매가 끝날 때 만료되는 타이머를 관리하려면 별도의 응용 프로그램이 필요합니다. 그 시점에서 수행하려는 작업에 따라 Windows 서비스가 적절한 유형의 응용 프로그램이 될 수 있습니다. _ (많은 웹 사이트 호스팅 서비스로는 사용자 정의 Windows 서비스를 실행할 수 없습니다.) _ – HABO