1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Ringspeicher

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Softi, 2 November 2010.

  1. Softi

    Softi Benutzer

    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
     
  2. Charly

    Charly Datenbank-Guru

    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
     
  3. Charly

    Charly Datenbank-Guru

    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.
     
  4. Softi

    Softi Benutzer

    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
     
  5. Softi

    Softi Benutzer

    AW: Ringspeicher

    Hab grad nochmal nachgeschaut.

    MS Sql Express unterstützt leider kein Agent :-(
     
  6. Charly

    Charly Datenbank-Guru

    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
     
  7. Charly

    Charly Datenbank-Guru

    AW: Ringspeicher

    Sorry,

    falsches Thema.

    Ich schreibe hier gerade an 3 verschiedenen Themen und habe 5 Browserfenster auf:D
     
  8. Charly

    Charly Datenbank-Guru

    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
     
  9. Charly

    Charly Datenbank-Guru

    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
     
  10. Softi

    Softi Benutzer

    AW: Ringspeicher

    Hallo Charly,

    Kein Thema:)

    Danke für die Tips!!!
    Werd das mal durchspielen


    Wünsche allen schonmal ein schönes Wochenende!

    Gruß
    Softi
     

Diese Seite empfehlen