Eine definierte Anzahl Zeilen löschen
Knickbauchwaldi
- datenbank
0 Tom0 Frank (no reg)
Hi zusammen,
Ich habe auf einem MS SQL 2003 Server eine Datenbank angelegt und dort auch eine Tabelle mit einer Menge von Datensätzen. Ich möchte nun eine bestimmte Anzahl von Datensätzen löschen. Ich habe es mit Delete und Truncate und so verucht, aber da kann ich ja nur nach bestimmten Kriterien oder alles löschen. Bei MySQL gibt es den/die LIMIT Befehl/Anweisung, aber mein QueryAnalyzer kennt diese/n Anweisung/Befehl nicht. Gibt es da ne möglichkeit ?
Gruß
Der Knickbauchwaldi
Hello,
MSSQL kennt nur TOP
Du musst also einen Aufsetzpunkt ermitteln über die einschränkenden Bedindungen und Order und kannst dann die nächsten X Sätze behandeln.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hello,
MSSQL kennt nur TOP
Du musst also einen Aufsetzpunkt ermitteln über die einschränkenden Bedindungen und Order und kannst dann die nächsten X Sätze behandeln.
Harzliche Grüße vom Berg
http://www.annerschbarrich.deTom
Kann man nicht sagen, dass man vom ersten Datensatz an die ersten 30000 Datensätze löschen möchte?
Hello,
Kann man nicht sagen, dass man vom ersten Datensatz an die ersten 30000 Datensätze löschen möchte?
Klar kann man das, wenn es egal ist, welche Datansätze da getroffen werden.
Es gibt in SQL-Datenbnaken pe Definition keine Reihenfolge der Datensätze. Die kommen bei einer Abfrage als Menge, und zwar so zusammengestellt, wie es dem DBMS gerade behagt.
Es gibt da natürlich für jedes DBMS Spezialaussagen, aber auf die würde ich mich nie verlassen.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Alles klar, werde das dann mal so versuchen.. vielen Dank für Eure Mühe =:0)
Hallo,
du hast
[ ] einen MS SQL Server 2000 auf MS Windows 2003 Server
[ ] einen MS SQL Server 2005 auf MS Windows 2000 Server
[ ] einen MS SQL Server 2005 auf MS Windows 2003 Server
Bei MS SQL 2005 Server kannst du dem DELETE ein "TOP (n) [PERCENT]"
hinzufügen, allerdings werden die Rows nach Zufallsprinzip aus
dem Gesamtset der zu löschenden ausgewählt. Ein ORDER BY ist nicht möglich.
Gruß, Frank
Hello,
Hallo,
du hast
[ ] einen MS SQL Server 2000 auf MS Windows 2003 Server
[ ] einen MS SQL Server 2005 auf MS Windows 2000 Server
[ ] einen MS SQL Server 2005 auf MS Windows 2003 ServerBei MS SQL 2005 Server kannst du dem DELETE ein "TOP (n) [PERCENT]"
hinzufügen, allerdings werden die Rows nach Zufallsprinzip aus
dem Gesamtset der zu löschenden ausgewählt. Ein ORDER BY ist nicht möglich.
Als alter Batchprogrammierer macht man das auch anders...
Ein select ID from TABLE TOP XY where BEDINGUNG ORDER BY ... ine eine Temporärtabelle.
Und dann _nach erfolgter Kontrolle_ erst ein Delete from Table where ...
Aber auch das können leider nicht alle DBMS unterstützen.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hi Tom,
ja, ein feiner, durchaus gangbarer Weg. :)
Ciao, Frank
Hallo,
du hast
[ ] einen MS SQL Server 2000 auf MS Windows 2003 Server
[ ] einen MS SQL Server 2005 auf MS Windows 2000 Server
[ ] einen MS SQL Server 2005 auf MS Windows 2003 ServerBei MS SQL 2005 Server kannst du dem DELETE ein "TOP (n) [PERCENT]"
hinzufügen, allerdings werden die Rows nach Zufallsprinzip aus
dem Gesamtset der zu löschenden ausgewählt. Ein ORDER BY ist nicht möglich.Gruß, Frank
Hi,
da hab ich mich wohl vertan. Das ist ein MS SQL 2000 Server auf einem MS Windows 2000 Server.
Das die per Zufall rausgelöscht werden, ist nicht schlimm, ich will nur die Menge der Datensätze reduzieren (für einen Test).
Ist es denn vielleicht möglich, dass man beim Erstellen der Tabelle (habe ich mit Select Into gemacht) nur eine gewisse Anzahl mit rüberkopiert?
Hallo,
siehe Workaround von Tom (in diesem Thread).
Ist es denn vielleicht möglich, dass man beim Erstellen der Tabelle (habe ich mit Select Into gemacht) nur eine gewisse Anzahl mit rüberkopiert?
Ja, SELECT TOP n [PERCENT] ...
Ciao, Frank