Datensätze mit dem DELETE Statement löschen
Geschrieben von: Christoph Wille Im heutigen Artikel beschäftigen wir uns mit einem weiteren SQL Statement - dem DELETE Kommando. Mit diesem kann man einfach, schnell und bequem Datensätze aus einer Tabelle löschen - und man überlässt dabei die gesamte Arbeit der Datenbank. Im Vergleich zu INSERT oder UPDATE ist die Syntax sogar noch um einiges einfacher:
DELETE FROM TableName WHERE Condition Wenn man also vor hat, die gesamte Tabelle unwiderbringlich (außer durch Restore) von Datensätzen zu säubern, so sieht das DELETE Statement wie folgt aus (für die titleauthor Tabelle aus der Datenbank pubs des SQL Server): DELETE FROM titleauthor Zugegebenermaßen kommt das wohl eher etwas selten vor - eher will man Datensätze gezielt aus der Tabelle löschen, und zwar vielleicht so: DELETE FROM titleauthor WHERE title_id='BU2075' Wie man sieht, gelten hier die gleichen Regeln für Zeichenketten wie überall anders in SQL auch - die Strings müssen mit Apostrophen eingegrenzt werden. Weiters gilt für DELETE auch das gleiche wie für UPDATE - entspricht mehr als ein Datensatz dem Kriterium, wird auch dieser von der Aktion berührt, was im Falle des DELETE Statements die Löschung ist. Sehen wir uns das oben gezeigte DELETE Statement einmal in "Action" an - in einer einfachen, aber bereits sehr optimierten ASP Seite:
<% strSQLServerName = "StrangeLove" strDatebaseName = "pubs" strUserName = "sa" strPassword = "" strConnection = "Provider=SQLOLEDB;Data Source=" & strSQLServerName & _ ";Initial Catalog=" & strDatebaseName & ";User ID=" & strUserName & _ ";Password=" & strPassword & ";" Set conn = Server.CreateObject("ADODB.Connection") conn.Open strConnection Const adCmdText = 1 Const adExecuteNoRecords = 128 nRowsAffected = CLng(0) conn.Execute "DELETE FROM titleauthor WHERE title_id='BU2075'", _ nRowsAffected, adCmdText Or adExecuteNoRecords Response.Write nRowsAffected & " Records gelöscht" %> Der Grund, warum ich hier von einer hochoptimierten Seite rede, ist folgender: ich teile der Execute Methode sehr genau mit, was sie von mir bekommt (adCmdText), und was ich von ihr nicht will (adExecuteNoRecords). Der Vorteil Nummer Eins ist, ADO muß nicht herausfinden, welche Art von Kommando ich absetzen will. Der Vorteil Nummer Zwei ist, ADO erstellt kein Recordset Objekt umsonst, was eine deutliche Beschleunigung bringt. Erwähnenswert ist sicherlich auch noch die Variable nRowsAffected. Diese liefert mir die Anzahl der Datensätze, die vom DELETE Kommando gelöscht wurden. Damit kann man eine nette Benutzerausgabe generieren. Die beiden Konstanten adCmdText und adExecuteNoRecords sind in dieser ASP Datei händisch deklariert, ich hätte diese allerdings auch über das METADATA Statement automatisch deklarieren lassen können: <!--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library" TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4}" --> SchlußbemerkungAuch das DELETE Statement kann ADO Fehler auslösen, und zwar meist dann, wenn Fremdschlüsselbeziehungen durch das Statement verletzt werden würden. Ergo - eine Fehlerbehandlung sollte man auf alle Fälle einplanen! Verwandte Artikel
Aktualisieren von Daten mit dem UPDATE Statement Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |