Benutzer mit den meisten Antworten
Einfaches Rückseetzten eines Wertes

Frage
-
Hallo Zusammen,
stele vor folgendem Problem. Und zwar habe ich eine Tabelle in der einige Spalten Zählwerte enthalten die durch externe Trigger hochgezählt werden. Wird ein bestimmter Wert eines Zählers erreicht soll nun ein reset auf 1 erfolgen. An der externen Applikation kann ich nichts ändern. Zur Zeit ist es über einen zeitgesteuerten SQL Job gelöst, der bei einer bestimmten Uhrzeit diese Felder in der Tabelle auf 1 setzt, dies ist mir aber zu "statisch". Gibt es eine einfache Möglichkeit, ohne zu große Datenbankänderung, die Zählerstande bei erreichen eines bestimmten Wertes auf 1 zu setzten? Dabei soll jeder Datensatz einzeln behandelt werden.
Gruß
Markus
Antworten
-
Unter externe Trigger hatte ich jetzt Trigger des externen Anbieters verstanden, die auf Deine Tabellen schreiben. Wenn alles zu der externen Software gehört, verstehe ich, wenn Du da die Finger von weg läßt.
Ich würde dann auch den Job aufsetzen und mit einer Where-Bedingung arbeiten
Update Tabelle
Set Feld = 1
where Feld = 999;Das kann dann ruhig alle 5 Minuten laufen und Du bist auf der sicheren Seite.
Einen schönen Tag noch,
Christoph
Microsoft SQL Server MVP
http://www.insidesql.org/blogs/cmu- Als Antwort markiert Andrei Talmaciu Mittwoch, 2. März 2011 14:10
Alle Antworten
-
Hallo Markus,
wäre es eine Möglichkeit einen Trigger an die Tabelle zu hängen? Die externen Trigger würden dann diesen Trigger beim Update auslösen.Einen schönen Tag noch,
Christoph
Microsoft SQL Server MVP
http://www.insidesql.org/blogs/cmu -
Hallo Christoph,
leider kann oder vielmehr darf ich an den Tabellen selber nichts ändern. Das einzige was ich machen kann ist es über eine SP oder irgendiwe über einen Job lösen. Der externen Trigger sind ja auch nur zum hochzählen, oder vielmehr er macht nichts anderes als den Zelleninhalt lesen und dann um 1 incrementieren. Das soll ja auch so bleiben. Das einzige was ich ablösen will ist eben dieser Zeitgesteuerete reset auf 1. Den will ich halt so öndern, das er nicht Zeitgesteuert ist sondern bei dem Wert 999 einen reset durchführt.
Gruß
Markus
-
hi Markus,
wenn deine Anforderung "Zählerstande bei erreichen eines bestimmten Wertes auf 1 zu setzten" vollständig formuliert ist, dann hast du nur zwei Möglichkeiten dies sicherzustellen:
1. Mittels eines Triggers wie Christoph schon schrieb.
2. Mittels einer Stored Procedure, die alle Schreibzugriffe auf die Tabelle abfängt.Alle anderen Lösungen erfüllen die in deiner enthaltenen Anforderung implizite Bedingung "der Zählerstand darf den vorgegeben maximalen Wert nicht überschreiten" nicht. Des weiteren enthält deine Anforderung eine zweite implizite Bedingung, welche aber unter Umständen kein Problem ist, "der Zählerstand muss instantan, augenblicklich oder ohne Zeitverzug zurückgesetzt werden.
Ich denke du solltest diese beiden impliziten Bedingungen prüfen, ob sie relevant sind. Gegebenenfalls musst du dein Anforderung neu formulieren.
Dann erst kann eine korrekte Lösung erfolgen.
Microsoft MVP Office Access
https://mvp.support.microsoft.com/profile/Stefan.Hoffmann -
ok...;-)
Also, ich denke alle Schreibzugriffe abzufangen ist nicht notwendig, da es momentan ja auch nur über einen SQl-Job gelöst wird. Zeitkritisch dürfte das ganze auch nicht sein, da ein inkrementieren des Zählerstandes erst wieder nach ca. 5 Minuten erfolgt. Also wird der Wert 999 erreicht, soll vor dem Werchsel von 999 auf 1000 der Zählerstand auf 1 gesetzt werden. Für mich heisst das wenn der Zählerstand den Wert 999 erreicht sollte eine Schleife laufen (ca 10 Sec.) erst dann sollte der Wert 1 gesetzt werden.
Das Problem mit dem "Abfangen" aller Schreibzugriffe ist meines erachtens die Notwendigkeit, die externe Applikation die für das hochzählen verantworlich ist zu ändern, das geht leider nicht.
Gruß
Markus
-
- Bearbeitet Stefan Hoffmann Donnerstag, 24. Februar 2011 09:56 typo
-
hi Markus,
genau..;-)
Dann kannst du bei deiner Lösung bleiben.
btw, Anforderungen sollte man nicht auf die leichte Schulter nehmen:
Unzureichende Informationen führen zu unvorhergesehenen Ergebnissen.
Immer. Murphy.
Microsoft MVP Office Access
https://mvp.support.microsoft.com/profile/Stefan.Hoffmann -
Unter externe Trigger hatte ich jetzt Trigger des externen Anbieters verstanden, die auf Deine Tabellen schreiben. Wenn alles zu der externen Software gehört, verstehe ich, wenn Du da die Finger von weg läßt.
Ich würde dann auch den Job aufsetzen und mit einer Where-Bedingung arbeiten
Update Tabelle
Set Feld = 1
where Feld = 999;Das kann dann ruhig alle 5 Minuten laufen und Du bist auf der sicheren Seite.
Einen schönen Tag noch,
Christoph
Microsoft SQL Server MVP
http://www.insidesql.org/blogs/cmu- Als Antwort markiert Andrei Talmaciu Mittwoch, 2. März 2011 14:10