Tabelle mit einer Zeile

Nun gut, dies ist bestimmt nicht der Standard-Fall. Gelegentlich kommt es vor, dass man sicherstellen muss, nur eine Zeile in einer Tabelle abzuspeichern. Hier kommt ein verblüffend einfacher Tipp, den ich mir bei Erland Sommarskog abgeschaut habe. Danke!

Berechnete Spalte als Primary Key

Hier wird einfach eine berechnete Spalte in der Tabelle eingeführt. Die Berechnung ist simpel: ein konstanter Wert. Aus der Online-Doku wissen wir:
Eine berechnete Spalte ist eine virtuelle Spalte, die nicht physisch in der Tabelle gespeichert ist, es sei denn, die Spalte wurde (mit PERSISTED) als persistente Spalte markiert.

Hier kommt das Skript für eine einfache Tabelle. Zum Download habe ich noch ein zweites Beispiel für eine Tabellenvariable bereitgestellt.

CREATE TABLE #SingleRow(u AS 1 PERSISTED PRIMARY KEY, a INT NOT NULL);

BEGIN Try
    
SELECT * FROM #SingleRow;

    
INSERT INTO #SingleRow (a) VALUES(1);
    
SELECT * FROM #SingleRow;

    
INSERT INTO #SingleRow (a) VALUES(2);
    
SELECT * FROM #SingleRow;
END Try
BEGIN Catch
    
SELECT
      
ERROR_NUMBER() AS ErrorNumber
      
,ERROR_SEVERITY() AS ErrorSeverity
      
,ERROR_STATE() AS ErrorState
      
,ERROR_PROCEDURE() AS ErrorProcedure
      
,ERROR_LINE() AS ErrorLine
      
,ERROR_MESSAGE() AS ErrorMessage;
END Catch;

GO

DROP TABLE #SingleRow;

Die Fehlermeldung, die man erwartungsgemäß beim zweiten Insert erhält lautet:
Violation of PRIMARY KEY constraint 'PK__#SingleR__3BD0199A5ACF527F'. Cannot insert duplicate key in object 'dbo.#SingleRow'. The duplicate key value is (1).

  SingleRow
  SingleRow_Variable