Transact-SQL (T-SQL) ist die prozedurale Erweiterung von SQL, die Microsoft und Sybase ab Ende der 1980er-Jahre für ihre relationalen Datenbanksysteme entwickelten. T-SQL bildet die Skript- und Programmiersprache von Microsoft SQL Server (und Azure SQL) und ergänzt Standard-SQL um Variablen, Kontrollfluss, Fehlerbehandlung und Stored Procedures.

Grundlagen und Batch

T-SQL arbeitet in Batches: In SQL Server Management Studio (SSMS) oder sqlcmd trennt GO einen Batch ab. Variablen werden mit DECLARE angelegt und mit SET belegt:

DECLARE @anzahl INT;
SET @anzahl = (SELECT COUNT(*) FROM kunden);
IF @anzahl > 100
    PRINT 'Viele Kunden: ' + CAST(@anzahl AS VARCHAR(10));
ELSE
    PRINT 'Überschaubare Liste';

Wichtige Befehle und Konstrukte

  • Kontrollfluss: IF / ELSE, BEGIN ... END, WHILE mit BREAK/CONTINUE, GOTO, RETURN, WAITFOR DELAY.
  • Fehlerbehandlung: BEGIN TRY ... END TRY / BEGIN CATCH ... END CATCH mit THROW (ab SQL Server 2012), älter RAISERROR; Zustand über @@ERROR und XACT_STATE().
  • Transaktionen: BEGIN TRAN, COMMIT, ROLLBACK, SAVE TRANSACTION; Verschachtelungstiefe über @@TRANCOUNT.
  • Stored Procedures: CREATE PROCEDURE mit Parametern, Ausführung per EXEC sp_name @param.
  • Tabellen im Skript: lokale Temp-Tabellen #temp, globale ##temp, Tabellenvariablen DECLARE @t TABLE (...) und CTEs mit WITH ... AS.
  • Auswahl: SELECT TOP (n), OFFSET ... ROWS FETCH NEXT ... ROWS ONLY, SELECT ... INTO (neue Tabelle aus Abfrage).
  • Fenster- und Datumsfunktionen: ROW_NUMBER(), RANK(), DENSE_RANK(), LAG()/LEAD(), STRING_AGG, GETDATE(), DATEADD, DATEDIFF.
  • Null-Handling: ISNULL, NULLIF, COALESCE.
  • Identitätsspalten: IDENTITY(1,1), letzter Wert über SCOPE_IDENTITY().
  • Systemprozeduren: sp_help, sp_who, sp_configure, sp_helpdb.

Damit SQL Server zuverlässig arbeiten kann, empfiehlt Microsoft, jede Prozedur mit SET NOCOUNT ON zu beginnen. T-SQL ist der Microsoft-/Sybase-Dialekt — das Gegenstück von Oracles PL/SQL.

Verwandte Grundlagen: SQL-Befehle, PL/SQL-Befehle, SQLite-Befehle.