Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Referenzhandbuch » Verwendung von SQL » SQL-Anweisungen » SQL-Anweisungen (P-Z)

 

TRUNCATE-Anweisung

Mit dieser Anweisung löschen Sie alle Zeilen aus einer Tabelle, ohne die Tabellendefinition zu löschen.

Syntax
TRUNCATE 
TABLE  [ Eigentümer.]Tabellenname
| MATERIALIZED VIEW  [ Eigentümer.]Name_materialisierte_Ansicht
Bemerkungen

Die TRUNCATE-Anweisung löscht alle Zeilen aus der Tabelle oder materialisierten Ansicht.

Hinweis

Die TRUNCATE TABLE-Anweisung sollte bei einer Datenbank, die in Synchronisationen oder Replikationen einbezogen ist, mit Umsicht verwendet werden, da die Anweisung alle Zeilen aus einer Tabelle löscht, ähnlich wie die DELETE-Anweisung ohne WHERE-Klausel. Allerdings werden aufgrund einer TRUNCATE-Anweisung keine Trigger ausgelöst. Überdies werden die einzelnen Zeilenlöschungen nicht ins Transaktionslog eingegeben und daher weder synchronisiert noch repliziert. Dies kann zu Inkonsistenzen führen, was möglicherweise ein Fehlschlagen der Synchronisation oder Replikation bewirkt.

Nach einer TRUNCATE-Anweisung bestehen das Schema des Objekts und alle Indizes solange weiter, bis Sie eine DROP-Anweisung ausführen. Die Schemadefinitionen und Integritätsregeln bleiben intakt, und Trigger sowie Berechtigungen bleiben gültig.

Tabellenname kann der Name einer Basistabelle oder einer temporären Tabelle sein.

Wenn bei TRUNCATE TABLE alle nachstehenden Kriterien erfüllt sind, wird eine schnelle Form der Tabellenkürzung durchgeführt:

  • Es gibt keine Fremdschlüssel, weder zu noch von der Tabelle.

  • Die Anweisung TRUNCATE TABLE wird nicht innerhalb eines Triggers ausgeführt.

  • Die Anweisung TRUNCATE TABLE wird nicht innerhalb einer unteilbaren Anweisung ausgeführt.

Wenn eine schnelle Kürzung durchgeführt wird, werden keine einzelnen DELETE-Vorgänge im Transaktionslog registriert und ein COMMIT wird vor und nach dem Vorgang ausgeführt. Die schnelle Kürzung kann in Snapshot-Transaktionen nicht benutzt werden. Weitere Hinweise finden Sie unter Snapshot-Isolation.

Wenn Sie versuchen, TRUNCATE TABLE mit einer Tabelle zu verwenden, für die ein Soforttextindex aufgebaut wird oder die von einer Sofortansicht referenziert wird, schlägt die Kürzung fehl. Dies kommt bei Nicht-Soforttextindizes oder materialisierten Ansichten nicht vor. Es wird aber empfohlen, die Daten in abhängigen Indizes und materialisierten Ansichten zu kürzen, bevor die TRUNCATE TABLE-Anweisung für eine Tabelle ausgeführt wird, und dann die Indizes und materialisierten Ansichten zu aktualisieren. Weitere Hinweise finden Sie unter TRUNCATE-Anweisung und TRUNCATE TEXT INDEX-Anweisung.

Berechtigungen
  • Sie müssen Eigentümer der Tabelle sein, DBA-Berechtigungen oder ALTER-Berechtigungen für die Tabelle besitzen.

  • Für Basistabellen und materialisierten Ansichten erfordert die TRUNCATE-Anweisung exklusiven Zugriff auf die Tabelle, da es sich um einen unteilbaren Vorgang handelt (entweder werden alle Zeilen gelöscht oder gar keine). Das bedeutet, dass Cursor, die zuvor geöffnet wurden, und sich auf die verkürzte Tabelle beziehen, geschlossen werden müssen und ein COMMIT oder ROLLBACK durchgeführt werden muss, damit die Tabelle freigegeben wird.

  • Bei temporären Tabellen hat jeder Benutzer seine eigene Datenkopie, daher ist Exklusivzugriff nicht erforderlich, wenn Sie die TRUNCATE-Anweisung ausführen.

Nebenwirkungen
  • Wenn Sie eine materialisierte Ansicht kürzen, ändern Sie den Status der Ansicht auf "nicht initialisiert". Weitere Hinweise finden Sie unter Status und Eigenschaften von materialisierten Ansichten.

  • Delete-Trigger werden von der TRUNCATE-Anweisung nicht ausgelöst.

  • Ein COMMIT wird vor und nach einer TRUNCATE-Anweisung ausgeführt.

  • Individuelle Zeilenlöschungen werden nicht ins Transaktionslog eingetragen, daher wird der TRUNCATE-Vorgang nicht repliziert. Verwenden Sie diese Anweisung nicht in einer SQL Remote-Replikation oder mit einer entfernten MobiLink-Datenbank.

  • Wenn die Tabelle eine als DEFAULT AUTOINCREMENT oder DEFAULT GLOBAL AUTOINCREMENT definierte Spalte enthält, setzt der Kürzungsvorgang den nächsten verfügbaren Wert für die Spalte zurück.

Siehe auch
Standards und Kompatibilität
  • SQL/2003   Transact-SQL-Erweiterung

Beispiel

So werden alle Zeilen aus der Tabelle Departments gelöscht:

TRUNCATE TABLE Departments;