1. /* Datenbank erzeugen, falls nicht bereits existiert
  2. IF NOT EXISTS(SELECT * FROM sys.databases WHERE name = 'RefIntegritaet') CREATE DATABASE RefIntegritaet
  3. GO
  4.  
  5. USE RefIntegritaet
  6.  
  7. /* Tabellen loeschen, falls diese existieren */
  8. IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'tblMitarbeiter') DROP TABLE tblMitarbeiter
  9. IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'tblAbteilung') DROP TABLE tblAbteilung
  10.  
  11. /* Tabellen erzeugen */
  12. CREATE TABLE tblAbteilung
  13. (
  14.     AbteilungId int IDENTITY PRIMARY KEY,
  15.     Bezeichnung varchar(50)
  16. );
  17. CREATE TABLE tblMitarbeiter
  18. (
  19.     AbteilungId int,
  20.     Name varchar(50)
  21. );
  22.  
  23. /* referenzielle Integritaet einschalten (fuer b) auskommentieren)*/
  24. ALTER TABLE tblMitarbeiter
  25.   ADD CONSTRAINT fkAbteilungMitarbeiter FOREIGN KEY (AbteilungId) REFERENCES tblAbteilung(AbteilungId)
  26.   ON DELETE CASCADE  /fuer c) Loeschweitergabe, (fuer b) auskommentieren) */
  27.  
  28. /* Datensaetze einfuegen */
  29. INSERT INTO tblAbteilung (Bezeichnung) VALUES ('Personal');
  30. INSERT INTO tblAbteilung (Bezeichnung) VALUES ('Einkauf');
  31. INSERT INTO tblAbteilung (Bezeichnung) VALUES ('Verkauf');
  32.  
  33. INSERT INTO tblMitarbeiter (AbteilungId, Name) VALUES (1, 'Lorenz');
  34. INSERT INTO tblMitarbeiter (AbteilungId, Name) VALUES (2, 'Hohl');
  35. INSERT INTO tblMitarbeiter (AbteilungId, Name) VALUES (3, 'Willschrein');
  36.  
  37. /* Test */
  38. DELETE FROM tblAbteilung WHERE AbteilungId = 1

a) der Datensatz lässt sich aus der Primärtabelle löschen. Die Detailtabelle bleibt davon unbeeinflusst.

b) Die Meldung lautet:

The DELETE statement conflicted with the REFERENCE constraint "fkAbteilungMitarbeiter". The conflict occurred in database "RefIntegritaet", table "dbo.tblMitarbeiter", column 'AbteilungId'.
The statement has been terminated.

Der Datensatz wird nicht gelöscht.

c) Der Datensatz aus der Primärtabelle wird gemeinsam mit dem referenzierenden Datensatz aus der Detailtabelle gelöscht.



Last modified: Sunday, 9 September 2018, 11:42 AM