OCT-Datenintegration

Vorlage für eine temporäre Tabelle

Vorlage für eine temporäre Tabelle, diese wird meist innerhalb einer Prozedur verwendet. Im Managementstudio Shift+Strg + M drücken, um die Platzhalter per Dialog zu füllen.

SQL
/*
	Snippet für die Erstellung einer tmp Tabelle per SSM
	Zuletzt geändert: 07/2026

	Gerd Tautenhahn für Saxess Software GmbH
*/

DROP TABLE IF EXISTS #<Tabellenname,String,tXXX>;
CREATE TABLE #<Tabellenname,String,tXXX>
	(
		 RowKey					BIGINT IDENTITY (1,1)								-- diese Zeile erzeugt einen Primärschlüssel, ggf. weglassen und Tabelle als Heap nutzen
		,FactoryID				NVARCHAR(255)	COLLATE DATABASE_DEFAULT	NOT NULL
		,ProductLineID			NVARCHAR(255)	COLLATE DATABASE_DEFAULT	NOT NULL
		,Buchungstext			NVARCHAR(4000)	COLLATE DATABASE_DEFAULT	NOT NULL
	);

Sortierung

Eine temporäre Tabelle wird vom SQL Server immer in der temp Datenbank erzeugt, nicht in der Datenbank, in welcher das Script ausgeführt wird. Da diese eine andere Sortierung als die aufrufende Datenbank haben kann, muss über die Option COLLATE DATABASE_DEFAULT in der Tabelle die Sortierung der aufrufenden Datenbank für jede Textspalte definiert werden.

Parallele Ausführung der Prozedur durch mehrere Benutzer

In einer temporären Tabelle darf es keine benannten Contraints geben - dieses Namen würden fest vergeben und führen zum Konflikt bei paralleler Ausführung durch mehrere
Benutzer https://learn.microsoft.com/en-us/answers/questions/461476/primary-key-constraint-on-a-temporary-table

Auch ein Index mit benanntem Namen würde zu Problemen bei paralleler Ausführung führen.
Indexe in temp Tabellen sind selten nötig https://www.brentozar.com/archive/2021/08/you-probably-shouldnt-index-your-temp-tables/

Setze im aufrufenden Script SET STATISTICS TIME ON; für eine exakte Performancemessung.

Um einen Primärschlüssel auf einer anderen Spalte als dem RowKey zu erzeugen definiert man die Spalte z.B. als "Kalendertag DATE PRIMARY KEY" , dadurch entsteht automatisch ein Clustered Index für die die Tabelle (sofern nicht schon einer existiert)

Falls ein Index über mehrere Spalten gehen soll, den Index ohne Namensangabe erstellen lassen.

SQL
CREATE TABLE #TempTable
(
	 ID      INT
	,Name    NVARCHAR(50)
	PRIMARY KEY CLUSTERED (ID, Name)  -- Ohne expliziten Namen, SQL Server generiert den Namen automatisch
);


Last updated: