Hallo liebe Community
ich habe folgendes Problem.
Ich soll eine Datenbank mit MSSQL SERVER 2008 erstellen in der es 2 Tabellen gibt.
CREATE DATABASE Uebung1;
USE Uebung1;
CREATE TABLE Produkt (
PID char(2) NOT NULL Primary Key,
Artikel varchar(255) NOT NULL,
Anzahl int NOT NULL,
);
CREATE TABLE Kauf (
KID int Primary key,
PID char(2) NOT NULL Foreign key references Produkt(PID),
Preis float,
Kunde varchar(255),
);
INSERT INTO Produkt (PID,Artikel,Anzahl) VALUES ('C1','COMPUTER',0);
INSERT INTO Produkt (PID,Artikel,Anzahl) VALUES ('D2','DRUCKER',0);
INSERT INTO Produkt (PID,Artikel,Anzahl) VALUES ('B1','BEAMER',0);
INSERT INTO Kauf (KID,PID,Preis,Kunde) VALUES (1,'C1',233.20,'Max');
INSERT INTO Kauf (KID,PID,Preis,Kunde) VALUES (2,'B1',320.00,'Paul');
INSERT INTO Kauf (KID,PID,Preis,Kunde) VALUES (3,'D2',99.45,'Max');
INSERT INTO Kauf (KID,PID,Preis,Kunde) VALUES (4,'C1',123.20,'Fritz');
INSERT INTO Kauf (KID,PID,Preis,Kunde) VALUES (5,'D2',100.20,'Egon');
Dieses funktioniert in dieser Form ersteinmal.
Allerdings wurde uns als weitere Aufgabe gestellt das bei einer Änderung einer PID die Änderung an die andere Tabelle weitergegeben werden soll. Meine Frage hierzu wäre, ob ich mit der Option eines Triggers richtig liege!? Anders kann ich mir zumindest keine Lösung vorstellen. Ich habe bereits folgendes hierzu versucht:
CREATE TRIGGER PID_Update
ON dbo.Produkt
AFTER UPDATE
AS
DECLARE @NEW_PID CHAR(2)
SET @NEW_PID = (SELECT PID FROM inserted)
UPDATE dbo.Produkt
SET PID = @NEW_PID
Wobei die Erzeugung des Triggers auch wieder funktionierte, allerdings macht entweder
A: Der Trigger nicht das was gefordert ist oder
B: Ich habe etwas mit den Primary key bzw Foreign Key nicht ganz verstanden denn
UPDATE dbo.Produkt
SET PID = 'K1'
WHERE PID = 'C1'
gibt mir folgende Fehlermeldung aus:
Meldung 547, Ebene 16, Status 0, Zeile 1
Die UPDATE-Anweisung steht in Konflikt mit der REFERENCE-Einschränkung 'FK__Kauf__PID__108B795B'. Der Konflikt trat in der 'Uebung1'-Datenbank, Tabelle 'dbo.Kauf', column 'PID' auf.
Die Anweisung wurde beendet.
:confused: