AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Etwas komlizierte DELETE-Statement???
Thema durchsuchen
Ansicht
Themen-Optionen

Etwas komlizierte DELETE-Statement???

Ein Thema von romber · begonnen am 11. Mär 2010 · letzter Beitrag vom 13. Mär 2010
Antwort Antwort
Seite 1 von 2  1 2      
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Etwas komlizierte DELETE-Statement???

  Alt 11. Mär 2010, 00:16
Datenbank: MS SQL Server • Version: 2008 • Zugriff über: ADO
Hallo!

Ich bekomme über einen Webservice viele Datensätze und füge diese einer Tabelle hinzu. Meistens sind das neue Datensätze, doch manchmal kommen auch die Datensätze, die bereits in der Tabelle vorhanden sind und geändert wurden. Diese füge ich ebenfalls hinzu, um später die Änderungen nachvollziehen zu können. In die Spalte "ic_datetime" schreibe ich immer die aktuelle Datum rein.

Nun möchte ich dem SQL Server Agent einen Auftrag verpassen, alle Datensätze und deren geänderte Kopien zu löschen, wenn letzte Änderung mehr als 3 Monate zurückliegt. Ich komme irgendwie mit dem SQL-Befehl nicht klar. Bitte um Hilfe!
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Etwas komlizierte DELETE-Statement???

  Alt 11. Mär 2010, 00:42
Das sind ja unglaublich hilfreiche Informationen, die du uns da so hinschmeißt.

SQL-Code:
DELETE FROM tabelle
FROM tabelle x
WHERE NOT EXISTS (SELECT *
                  FROM tabelle
                  WHERE id = x.id
                    AND ic_datetime > DATEADD(m, -3, GETDATE()))
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: Etwas komlizierte DELETE-Statement???

  Alt 11. Mär 2010, 01:27
Vielen Dank!
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#4

Re: Etwas komlizierte DELETE-Statement???

  Alt 12. Mär 2010, 15:01
Klappt irgendwie nicht.

SQL-Code:
DELETE
FROM ldf_objects x
WHERE NOT EXISTS (SELECT *
                  FROM ldf_objects
                  WHERE id = x.id
                  AND ic_datetime > DATEADD(m, -3, GETDATE()))
Ich bekomme die Fehlermeldung Falsche Syntax in der Nähe von 'X'.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Etwas komlizierte DELETE-Statement???

  Alt 12. Mär 2010, 15:06
Ich denke mal das Omata das x nur als Platzhalter für den Tabellennamen geschrieben hat.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#6

Re: Etwas komlizierte DELETE-Statement???

  Alt 12. Mär 2010, 15:29
Zitat von Sharky:
Ich denke mal das Omata das x nur als Platzhalter für den Tabellennamen geschrieben hat.
Denke ich nicht. Denn es wird auch in der zweiten SELECT-Abfrage benutzt. Denn so

SQL-Code:
DELETE
FROM ldf_objects
WHERE NOT EXISTS (SELECT *
                  FROM ldf_objects
                  WHERE id = ldf_objects.id
                  AND ic_datetime > DATEADD(m, -3, GETDATE()))
passiert gar nicht und ergibt eigentlich keinen Sinn. Wenn ich Omata's Code statt DELETE mit SELECT verwende, werden die betroffene Datensätze angezeigt.

SQL-Code:
SELECT *
FROM ldf_objects x
WHERE NOT EXISTS (SELECT *
                  FROM ldf_objects
                  WHERE id = x.id
                  AND ic_datetime > DATEADD(m, -3, GETDATE()))
Mit DELETE habe ich o.g. Fehler.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Etwas komlizierte DELETE-Statement???

  Alt 12. Mär 2010, 15:59
Hallo Romber,

Es soll ja SQL-Server Versionen gegeben haben die nur so etwas konnten:
DELETE FROM Tabelle WHERE Tabelle.ID=123456 sprich, keine Bezüge zu anderen Tabellen zuließen und auch keine Subselects akzeptierten.

ausserdem halte ich die Abfrage für falsch.
wenn ich Deine Frage richtig verstanden habe liegen die Daten in folgender Form vor:
Code:
ID Dateninhalt ic_datetime
ID sollte für jeden Datensatz unterschiedlich sein, darum
SQL-Code:
DELETE
FROM tabelle x
WHERE NOT EXISTS (SELECT *
                  FROM Tabelle
                  WHERE dateninhalt = x.dateninhalt
                  AND ic_datetime > DATEADD(m, -3, GETDATE()))
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#8

Re: Etwas komlizierte DELETE-Statement???

  Alt 12. Mär 2010, 17:33
Zitat von p80286:
ID sollte für jeden Datensatz unterschiedlich sein, darum
ID ist eben nicht immer unterschiedlich. Wenn ein geändertes Datensatz hinzu gefügt wird, dann sind auch die IDs gleich. Ich habe in der Tabelle noch eine Spalte, die automatisch hochgezählt wird. Das ist aber nicht wichtig.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Etwas komlizierte DELETE-Statement???

  Alt 12. Mär 2010, 17:50
Wie Du die Felder in Deiner DB benennst, ist natürlich alleine Deine Sache.
Nach meinem Verständnist ist ID der eindeutige Satzschlüssel, der dementsprechend auch nicht mehrfach vorkommen kann.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#10

Re: Etwas komlizierte DELETE-Statement???

  Alt 12. Mär 2010, 18:12
Zitat von p80286:
Nach meinem Verständnist ist ID der eindeutige Satzschlüssel, der dementsprechend auch nicht mehrfach vorkommen kann.
Nach meinem auch. Es heißt auch anders bei mir. Omata hat in seinem Beispiel ID verwendet.

Spalte id in meiner Tabelle ist eindeutiger Satzschlüssel und wird automatisch hochgezählt. In die Spalte ic_id wird die ID-Nummer des Datensatzen hinzufügt, praktisch die IDdes Datensatzes in der Tabelle des Datenlieferanten. Und die kann gleich sein, wenn geänderte Datem hinzufügen werden.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz