![]() |
Datenbank: MS SQL Server • Version: 2008 • Zugriff über: ADO
Etwas komlizierte DELETE-Statement???
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! |
Re: Etwas komlizierte DELETE-Statement???
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())) |
Re: Etwas komlizierte DELETE-Statement???
Vielen Dank!
|
Re: Etwas komlizierte DELETE-Statement???
Klappt irgendwie nicht.
SQL-Code:
Ich bekomme die Fehlermeldung Falsche Syntax in der Nähe von 'X'.
DELETE
FROM ldf_objects x WHERE NOT EXISTS (SELECT * FROM ldf_objects WHERE id = x.id AND ic_datetime > DATEADD(m, -3, GETDATE())) |
Re: Etwas komlizierte DELETE-Statement???
Ich denke mal das Omata das x nur als Platzhalter für den Tabellennamen geschrieben hat. ;-)
|
Re: Etwas komlizierte DELETE-Statement???
Zitat:
SQL-Code:
passiert gar nicht und ergibt eigentlich keinen Sinn. Wenn ich Omata's Code statt DELETE mit SELECT verwende, werden die betroffene Datensätze angezeigt.
DELETE
FROM ldf_objects WHERE NOT EXISTS (SELECT * FROM ldf_objects WHERE id = ldf_objects.id AND ic_datetime > DATEADD(m, -3, GETDATE()))
SQL-Code:
Mit DELETE habe ich o.g. Fehler.
SELECT *
FROM ldf_objects x WHERE NOT EXISTS (SELECT * FROM ldf_objects WHERE id = x.id AND ic_datetime > DATEADD(m, -3, GETDATE())) |
Re: Etwas komlizierte DELETE-Statement???
Hallo Romber,
Es soll ja SQL-Server Versionen gegeben haben die nur so etwas konnten:
SQL-Code:
sprich, keine Bezüge zu anderen Tabellen zuließen und auch keine Subselects akzeptierten.
DELETE FROM Tabelle WHERE Tabelle.ID=123456
ausserdem halte ich die Abfrage für falsch. wenn ich Deine Frage richtig verstanden habe liegen die Daten in folgender Form vor:
Code:
ID sollte für jeden Datensatz unterschiedlich sein, darum
ID Dateninhalt ic_datetime
SQL-Code:
Gruß
DELETE
FROM tabelle x WHERE NOT EXISTS (SELECT * FROM Tabelle WHERE dateninhalt = x.dateninhalt AND ic_datetime > DATEADD(m, -3, GETDATE())) K-H |
Re: Etwas komlizierte DELETE-Statement???
Zitat:
|
Re: Etwas komlizierte DELETE-Statement???
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 |
Re: Etwas komlizierte DELETE-Statement???
Zitat:
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz