Mam tabeli MSSQL, który zawiera zadania zaplanowane, że moje usługi Windows powinien proces oparty off znacznik czasu i zastanawiałem się, co alternatywy mam na odpytywanie tabeli jak tenAlternatywa dla tabeli MSSQL odpytywania
SELECT *
FROM mydb
WHERE SYSUTCDATE() >= timestamp
I” Prawdopodobnie musisz odpytywać tabelę przynajmniej co 5 sekund. Zasadniczo chcę, aby moja usługa systemu Windows przetwarzała dane w czasie określonym przez znacznik czasu w tabeli.
Dla mnie nie wydaje się to najskuteczniejszym sposobem. Już sprawdziłem wyzwalacze CLR DML & i nie sądzę, że będą działać tak, jak będą strzelać, gdy dane ulegną zmianie, a nie gdy minie znacznik czasu. Myśli?
Aktualizacja 2:
zdałem sobie sprawę, że nazywając go „zaplanowane zadania” był ubogi wybór brzmienia, więc postaram się opisać to bardziej szczegółowo.
Celem tego projektu jest wysyłanie powiadomień telefonicznych do osób w zależności od naszej logiki biznesowej. Jeden scenariusz polega na tym, że wielu ludzi powinno być dzwonionych w określonych godzinach w oparciu o zdarzenie wewnętrzne. Ta sama osoba może zostać wywołana wiele razy w zależności od tego, jak odebrano połączenie telefoniczne. W ten sposób, aby uprościć rzeczy i usunąć złożoność i obciążenie związane z zarządzaniem stanem każdego połączenia telefonicznego, pomyślałem, że dobrym pomysłem byłoby przewidywanie każdego połączenia telefonicznego poprzez wpisanie go jako wpis w tabeli. Gdy powiadomienia mają zostać zatrzymane, oczekujące połączenia telefoniczne są usuwane z tabeli. Ułatwi to projektowanie systemu Windows. Wszystko, co można zrobić, to wysłać powiadomienie na podstawie jego znacznika czasu w tabeli.
Aktualizacja 1:
Message Queue
nie zorientowali się, jak nadawca wiadomości będzie można umieścić na kolejce w odpowiednim czasie.
SqlDependency
Mam problem przy użyciu kodu przykład od Detecting Changes with SqlDependency. Z jakiegoś powodu zdarzenie OnChange jest uruchamiane tylko na początku, nic się nie dzieje później.
Aktualizacja: Nie sądzę, że SqlDependency będzie działać, ponieważ dane w tabeli nie zmienią się, aby wyzwalać wyzwalacz.
void Initialization()
{
// Create a dependency connection.
SqlDependency.Start(connectionString, queueName);
}
void SomeMethod()
{
// Assume connection is an open SqlConnection.
// Create a new SqlCommand object.
using (SqlCommand command=new SqlCommand(
"SELECT timestamp,othercolumn FROM mydb WHERE SYSUTCDATE() >= timestamp",
connection))
{
// Create a dependency and associate it with the SqlCommand.
SqlDependency dependency=new SqlDependency(command);
// Maintain the refence in a class member.
// Subscribe to the SqlDependency event.
dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);
// Execute the command.
using (SqlDataReader reader = command.ExecuteReader())
{
// Process the DataReader.
}
}
Czy rozważałeś zamiast tego używać kolejki wiadomości? – recursive
Spróbuj SqlDependency: http://msdn.microsoft.com/en-us/library/62xk7953(v=vs.110).aspx –
Czy rozważałeś zamianę tych zadań na zadania i uruchamianie ich za pośrednictwem SQL Server Agent? –