Ich habe gerade ein Projekt, bei dem ich die Preise für eine Liste von Produkten aktualisieren muss. Die Preise für den Zeitraum vom 1.1.2007 bis 31.12.2011 sind gegeben und ich muss diese Preise jedes Jahr um 5% erhöhen, bis Ende 2015.
Hier ist, was ich habe. Aber ich komme beim Aktualisieren der Preise (dh 5% Erhöhung) nicht weiter. Ich erhalte ständig eine Fehlermeldung über doppelte Daten. Vielen Dank im Voraus für jegliche Hilfe/Hinweise!
Fehlermeldung:
Msg 2627, Level 14, State 1, Procedure update_history, Line 9
Verstoß gegen den PRIMARY KEY-Constraint 'PK_PriceCha_207F7DE23A81B327'. Kann keinen doppelten Schlüssel in Objekt 'dbo.PriceChange_History' einfügen.
Tabellen:
create table PriceChange
(ProductID INTEGER NOT NULL PRIMARY KEY,
StartDate DATE,
EndingDate DATE,
UnitPrice MONEY);
ALTER TABLE PriceChange ADD FOREIGN KEY (ProductID) REFERENCES PRODUCT(ProductID)
create table PriceChange_History
(History_ProductID INTEGER NOT NULL PRIMARY KEY,
History_StartDate DATE,
History_EndingDate DATE,
History_UnitPrice MONEY,
Modified_date datetime,
ChangeType varchar(20) );
ALTER TABLE PriceChange_History
ADD FOREIGN KEY (History_ProductID) REFERENCES PRODUCT(ProductID)
Trigger
create trigger [insert_history] on PriceChange
for insert
as
insert PriceChange_History (History_ProductID, History_StartDate,
History_EndingDate, History_UnitPrice,
Modified_date, ChangeType)
select
ProductID, StartDate, EndingDate, UnitPrice,
GETDATE(), 'EINGEFÜGT'
from inserted
create trigger [update_history] on PriceChange
for update
as
insert PriceChange_History(History_ProductID, History_StartDate,
History_EndingDate, History_UnitPrice,
Modified_date, ChangeType)
select
ProductID, StartDate, EndingDate, UnitPrice,
GETDATE(), 'VOR AKTUALISIERUNG'
from deleted
insert PriceChange_History(History_ProductID, History_StartDate,
History_EndingDate, History_UnitPrice,
Modified_date, ChangeType)
select
ProductID, StartDate, EndingDate, UnitPrice,
GETDATE(), 'NACH AKTUALISIERUNG'
from inserted
EINFÜGEN + AKTUALISIEREN
INSERT INTO PriceChange
VALUES(1,'1.1.2007', '31.12.2011', 500) <--- diese Abfrage wird sowohl in pricechange als auch in die PriceChange-Geschichte aufgenommen
UPDATE PriceChange
SET UnitPrice = (UnitPrice * 1.05),
StartDate = '1.1.2012',
EndingDate = '31.12.2012'
WHERE
ProductID = 1
UPDATE PriceChange
SET UnitPrice = (UnitPrice * 1.05),
StartDate = '1.1.2013',
EndingDate = '31.12.2013'
WHERE
ProductID = 1
UPDATE PriceChange
SET UnitPrice = (UnitPrice * 1.05),
StartDate = '1.1.2014',
EndingDate = '31.12.2014'
WHERE
ProductID = 1
UPDATE PriceChange
SET UnitPrice = (UnitPrice * 1.05),
StartDate = '1.1.2015',
EndingDate = '31.12.2015'
WHERE
ProductID = 1