Ringspeicher

Softi

Benutzer
Beiträge
19
Hallo erstmal an alle,

bin neu hier und leider noch am Anfang in Sachen SQL.

Ich müsste eine Tabelle eines MS Sql Express R2 als eine
Art Ringspeicher einrichten.

Es Werten zyklisch Messwerte in die DB Tabelle geschrieben und
die Werte sollen aber nur 30 Tage in der Tabelle bleiben.

Wie mache ich das am besten:confused:
Mit Trigger und Stored P?

Auf was muss ich achten?


Hätte vielleicht jemand ein klitzekleines Beispiel für mich?
Bin für jede Hilfe dankbar!

Danke!

Gruß
Softi
 
Werbung:
AW: Ringspeicher

Hallo Softi,

sowas kann man mit dem SQL Server-Agent lösen.

Mit dem Agent kann man nicht nur Wartungspläne einrichten sondern auch T-SQL-Scripts zeitgesteuert ausführen lassen.

Jetzt weis ich nicht genau was die Express Edition alles kann. Ich denke aber das man damit auch Aufträge einrichten kann.

Voraussetzung ist das der SQL Server-Agent läuft.

Wenn du keine GUI hast um dir einen Job/Auftrag einzurichten und keine Lust kilometerlange SQL-Scripts zu schreiben, kann ich dir einen Job zusammenbauen und dir das Script schicken. Dann musst du nur noch die Variablen an dein System anpassen.

Gruß Charly
 
AW: Ringspeicher

Hallo nochmal,

Variante 2 wäre ein Trigger der bei INSERT und UPDATE ausgelöst wird.

Der müsste dann in etwa so aussehen.

Code:
CREATE TRIGGER myTrigger
ON myTable
FOR INSERT, UPDATE 
AS 
BEGIN
 DELETE FROM myTable WHERE Datumsspalte <= GetDate() - 30
END
GO

Der Trigger wird aber nur dann ausgelöst wenn UPDATEs oder INSERTs auf die Tabelle angewendet werden. Es kann also vorkommen, wenn mal mehrere Tage nichts in die Tabelle geschrieben wird, das du noch Zeilen in der Tabelle hast die älter als 30 Tage sind. Und wenn du alle paar Sekunden Daten in die Tabelle schreibst wird auch der Trigger alle paar Sekunden ausgeführt.

Gruß Charly

PS: Ich bin kein Freund von Triggern und versuche die Dinger wo es geht zu vermeiden.
 
AW: Ringspeicher

Guten Morgen Charly,

erstmal vielen Dank für deine Antwort!

Was mir jetzt noch in den Sinn gekommen ist:

Wenn die "30"Tage variable sein müssen, komm ich um
Trigger wahrscheinlich nicht herum, oder?

Habe ein kleines VB Programm das die Daten in eine Grid
schmeist.
Nun könnte eben über dieses VB Prgramm gewählt werden
wie lange die Daten in der Datenbank bleiben sollen.
(wenn jede Sekunde Daten kommen, ist dein Einwand mit
den Triggern gut, da drann hab gar nicht gedacht!)


Oder kann man einen Job einmal Stündlich ausführen und diesem
aber Variablen aus dem VB Programm übergeben?

Gruß
Softi
 
AW: Ringspeicher

Hallo Softi,

schau dir mal das Programm 'bcp' an (hoffentlich in der Express Ed. vorhanden). Das Tool wird benutzt um Daten vom SQL-Server in eine Textdatei zu schreiben oder von dieser zu lesen.

Hat deine Tabelle eine Datumsspalte? Sollte bei einer Tabelle mit Umsatzzahlen eigentlich der Fall sein.

Wenn Ja, sagst du bcp in der SELECT das du nur Daten von Heute haben willst.

Syntax für die Abfrage der heutigen Daten könnte so aussehen:

Code:
SELECT * FROM Tabelle WHERE CONVERT (nvarchar , Datumsspalte , 102 )= CONVERT (nvarchar , Getdate() , 102 )
)

Gruß Charly
 
AW: Ringspeicher

Hallo Softi,

wenn du es Serverseitig lösen willst fällt mir für die Express Edition jetzt auf Anhieb auch nichts Besseres wie Trigger ein.

Ist vielleicht doch der elegantere Weg es über VB zu lösen.

Und nochmal Entschuldigung für den falsch eingestellten Kommentar.

Gruß Charly
 
AW: Ringspeicher

hallo Softi,

einen hab ich noch.

Sozusagen um 3 Ecken gedacht.

Es gibt das Befehlszeilenprogramm sqlcmd.

Dem kannst du eine Script-Datei übergeben.

Das ganze kannst du dann in eine Batch-Datei schreiben und mit dem Windows-Taskplaner Zeitgesteuert einmal pro Stunde ausführen lassen.

Ist fast schon ein SQL-Agent-Job. :D

Gruß Charly
 
Werbung:
Zurück
Oben