MS SQL - Zeilen rauslöschen!

  • VB.NET
  • .NET (FX) 1.0–2.0

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Mokki.

    MS SQL - Zeilen rauslöschen!

    Moin! :)
    Weiß jemand, mit welchen Befehl ich alle Zeilen ab 15 Löschen kann?
    Also alle anderen Werte sollen gelöscht werden.
    Da ich möchte dass meine Toplist nicht zu groß wird,
    möchte ich dies Begrenzen!
    BIG THX
    Bilder
    • pfeil.png

      27,79 kB, 429×598, 360 mal angesehen
    Visual Basic.NET 8o
    MS-SQL
    8o
    Hast du schonmal Google gefragt?
    Wenn ja, und du absolut nicht auf ne Lösung gekommen bist ( was ziemlich unwahrscheinlich ist), schau hier rein:
    w3schools.com/sql/sql_delete.asp

    Immer noch nichts? Dann darfst du jetzt in den Spoiler schauen:
    Spoiler anzeigen

    SQL-Abfrage

    1. DELETE FROM [TabelleDeinerWahl] WHERE [SpalteDeinerWahl] > [WertDeinerWahl];
    Hey,

    ich werf auch mal "Between" in den Raum. (klick mich)
    So könntest du immer ermitteln welcher "Platz" zwischen 1 - 15 ist.
    Dann brauchste auch nix löschen- aber kA wie deine TopListe entsteht.
    (Vielleicht auch anders regeln? - Eine TopListen-Tabelle erstellen lassen / updaten lassen sobald sich das ranking ändert?)
    Option Strict On!
    @an alle
    Vielen Dank, für eure Antwort.

    Leider könnte ich das Problem nicht lösen. ;(
    Das man mit "DELETE FROM" Datensätze löschen kann das weiß ich.
    Aber leider kann ich die WHERE Klausel nicht richtig programmieren.
    Da ich nicht weiß wie ich die Anzahl der Werte ermittelt, und alle ab 15 Löschen kann.
    Dies muss doch auch irgendwie möglich sein?
    Freue mich auf guten Rat!
    Vielen Dank!
    Visual Basic.NET 8o
    MS-SQL
    8o
    Also das ist jetzt wirklich nicht schwer und in post #4 von Drahuverar ist alles dirn was du brauchst.

    VB.NET-Quellcode

    1. SELECT *
    2. FROM table_name
    3. WHERE column_name BETWEEN value1 AND value2


    Deine Tabelle braucht eine ID column. die ID ist das was in der Where klausel benutzt wird.

    Arbeitest du mit der DB direkt methode oder kommen tableadapter ins spiel?
    Hier könnte meine Signatur stehen.
    Du solltest eine Spalte mit Primärschlüssel haben. Ist generell sinnvoll.
    In deinem Fall stellt sich die Frage, nach welchem Kriterium sollen die ersten 15 ermittelt werden.
    Die sind ja alle Platz 1.

    Wenn du keine weitere Spalte einfügen willst (vor allem keine Identiy Spalte, das macht hier nicht viel Sinn), dann kannst du das mit der ROW_NUMBER Funktion lösen:

    SQL-Abfrage

    1. select * from (select *, ROW_NUMBER() OVER (ORDER BY Date Desc) as rang from tbl_soundso) s where s.rang > 15


    Ich hab den Rang jetzt nach DATE DESC sortiert. Spiel dich ein bissl damit und dann änder das erste Select auf Delete.

    //Edit:

    SQL-Abfrage

    1. Delete l from (select *, ROW_NUMBER() OVER (ORDER BY Datespalte Desc) as rang from tbl_bla) l where l.rang > 15



    //EDIT 2:

    Warum willst das überhaupt löschen? Vielleicht willst die Daten ja doch iwann verwenden. Du kannst die Daten ja vorm Anzeigen filtern?
    Das ist meine Signatur und sie wird wunderbar sein!

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Mono“ ()

    Hier schau dir das mal an.
    Im Dataset Fenster findest du die Tableadapter da ist die Delete Query zu finden.
    Dateien
    • Sqltest.zip

      (960,7 kB, 118 mal heruntergeladen, zuletzt: )
    Hier könnte meine Signatur stehen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „mox“ ()

    @an Alle
    Nochmals Vielen Dank, für eure Hilfe. :)

    Leider funktioniert die Funktion ROW_NUMBER() nicht bei SQL-Compact.
    Die Funktion wird von SQL Server Compact Edition nicht erkannt. [ Name of function = ROW_NUMBER,Data type (if known) = ]

    SQL-Abfrage

    1. Delete l from (select *, ROW_NUMBER() OVER (ORDER BY Datespalte Desc) as rang from tbl_bla) l where l.rang > 15

    Ich habe nun festgestellt das mit diesem Code:

    VB.NET-Quellcode

    1. SELECT COUNT(*) FROM tblTiere

    Die Anzahl der Splaten ermittelt wird.
    Beispielcode:

    SQL-Abfrage

    1. DECLARE @intSpalten int = SELECT COUNT(*) FROM tblTiere
    2. DELETE *
    3. FROM tblTiere
    4. WHERE @intSpalten = 1 TO 15

    Ich hoffe das Problem kan man lösen!

    Warum willst das überhaupt löschen? Vielleicht willst die Daten ja doch iwann verwenden. Du kannst die Daten ja vorm Anzeigen filtern?
    Ich möchte das die Datenbank nicht undendlich größ und unübersichtlich wird. ^^
    Visual Basic.NET 8o
    MS-SQL
    8o
    @An alle
    Super, Vielen Dank für eure Hilfe. :thumbsup:
    Ich habe das Problem nun doch noch anders lösen können.
    Ich prüfe ob die Tabelle in der Datenbank >=15 ist,
    falls Ja, lösche ich dies.
    Und fange neu an, damit die Datenbank später übersichtlich beleibt!
    BIG THX!

    Code:

    VB.NET-Quellcode

    1. Private Sub Button8_Click(sender As System.Object, e As System.EventArgs) Handles Button8.Click
    2. If Sql.GetSQLText("SELECT Count(*) FROM tblTiere") >= 15 Then
    3. Sql.SetSQL("DELETE FROM tblTiere")
    4. MsgBox("alle einträge gelöscht!")
    5. End If
    6. End Sub



    Visual Basic.NET 8o
    MS-SQL
    8o