Knickbauchwaldi: Eine definierte Anzahl Zeilen löschen

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

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

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

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

      Kann man nicht sagen, dass man vom ersten Datensatz an die ersten 30000 Datensätze löschen möchte?

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

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

        1. Alles klar, werde das dann mal so versuchen.. vielen Dank für Eure Mühe =:0)

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

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

      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

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

      1. Hi Tom,

        ja, ein feiner, durchaus gangbarer Weg. :)

        Ciao, Frank

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

      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?

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