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).
Print article | This entry was posted by cmu on 25.05.12 at 09:03:00 . Follow any responses to this post through RSS 2.0. |