Ich erstellen einen Task-Scheduler auf SQL Server 2008.
Ich habe eine Tabelle, die ich zum Speichern von Aufgaben verwenden. Jede Aufgabe ist ein Aufgabenname (z. B. ImportFile) und Argumente. Ich speichere Argumente in der XML-Spalte, da verschiedene Aufgaben unterschiedliche Signaturen haben.Wählen Sie aus Tabelle mit XML-Spalte
Tabelle ist wie folgt:
Id:integer(PK) | operation:nvarchar | Arguments:xml
Bevor Sie eine Aufgabe Queuing, ich brauche oft hat, dass bestimmte Aufgabe zu überprüfen, noch nicht geplant. Das Nachschlagen erfolgt sowohl auf der Grundlage von Operationen als auch von Argumenten.
Frage: Verwenden von Linq-zu-Sql wie kann ich überprüfen, ob die angegebene Operation + Args in der Warteschlange bereits vorhanden ist?
Ich suche so etwas wie:
var isTaskScheduled = db.Tasks.Any(t =>
t.Opearation == task.Operation &&
t.Arguments == task.ArgumentsAsXElement);
(das funktioniert nicht, da SQL Server nicht XML-Typ vergleichen kann)
Vorschlägejede alternative Implementierung?
Ja, zumutbar. Aber ich habe ein Problem mit * ziemlich sicher * Teil. Ich habe gehofft, dass es eine bessere Lösung gibt.Eine Variante dieses Ansatzes ist die Verwendung von CRC, um die Ergebnisuntermenge signifikant einzugrenzen und dann (wenn mehr als ein Ergebnis zurückgegeben wird) einen (teuren) XML-Vergleich durchzuführen. –