TSQL

Die SQL-Standard-Erweiterung von Microsoft.
Datentypen:
Bei Geldbeträgen entweder Money oder wenn nicht geht decimal weil die Nachkommastellen weil sie genau sind

Variablen:

DECLARE @var INT;

SET @VAR = 12;

Cursor: Nur nehmen wenn nicht anders möglich, weil sehr langsam

DECLARE cursor CURSOR FOR
SELECT ... FROM ...

OPEN cursor

Trigger:

Stored Procedure, die automatisch ausgeführt wird, wenn etwas passiert

Zeitpunkte:

  • BEFORE: wird vor der Änderung durchgeführt
  • AFTER: wird nach der Änderung durchgeführt, d.h. Zurücknehmen mit ROLLBACK TRANSACTION, das funktioniert nur wenn eine Transaktion aufgemacht wurde
  • INSTEAD OF: wird statt der Änderung durchgeführt

Level:

  • Row-Level-Trigger: Trigger wird für jede betroffene Zeile einzeln ausgeführt
  • Statement-Level-Trigger: Trigger wird einmal mit allen Änderungen ausgeführt (bei MSSQL)

Datenzugriff:
Über zwei Spezialtabellen, INSERTED sind die neuen Daten und DELETED, die Daten die gelöscht werden. Bei Updates sind in INSERTED die neuen und in DELETED die alten Daten.

Rekursive: Ein Trigger ruft sich selbst wieder auf
Nested: Ein Trigger ruft einen anderen Trigger auf

Anwendungsfälle:

  • Überwachung von Constraints, die sonst nicht möglich sind (z.B. max 36 Schüler in einer Klasse)
  • Automatisierung von Aktionen, die sonst manuell durchgeführt werden müssten (z.B. Aktualisierung redundanter Daten)

Syntax:

CREATE OR ALTER TRIGGER name
ON table
[FOR/AFTER/INSTEAD OF] INSERT, UPDATE, DELETE
AS BEGIN
  ...
END

Am Anfang Immer:

SET NOCOUNT ON;
IF (ROWCOUNT_BIG() = 0) RETURN;