我不知道如何创建此历史记录触发器。
假设我们要存储的各个项目的价格变化的历史记录。要做到这一点,我们首先需要至少创建一个Item_price_history
表,用于存储该项目的引用,它的老价格,
其新的价格,以及更改日期。然后,我们可以定义一个触发Item
表更新,每当一个项目价格更新Item_price_history
表。
我创建了两个表格如下:
CREATE TABLE ITEM(
item_id DECIMAL(10) NOT NULL,
description VARCHAR(30),
price DECIMAL(10),
PRIMARY KEY (item_id));
CREATE TABLE Item_price_history (
history_id DECIMAL(10) NOT NULL,
item_id DECIMAL(10) NOT NULL,
old_price DECIMAL(10,2),
new_price DECIMAL(10,2),
date_of_change DATE,
PRIMARY KEY (HISTORY_ID),
FOREIGN KEY (ITEM_ID) REFERENCES item);
答案 0 :(得分:0)
这是触发器:
CREATE TRIGGER trHistory ON dbo.ITEM
FOR UPDATE --only for update
AS
BEGIN
IF UPDATE(price) --if price is really updated and not the other columns
BEGIN
INSERT INTO dbo.Item_price_history(item_id, old_price, new_price, date_of_change)
SELECT d.item_id, d.price, i.price, GETDATE()
FROM Deleted d
JOIN Inserted i ON d.item_id = i.item_id
END
END
答案 1 :(得分:0)
试试这个。
CREATE TRIGGER Sample ON Item_price_history
FOR UPDATE
AS
BEGIN
DECLARE @nOldPRICE AS DECIMAL(10)
SET @nOldPRICE = (SELECT price FROM DELETED)
INSERT INTO Item_price_history (item_id, old_price, new_price, date_of_change)
SELECT item_id, @nOldPRICE, new_price, GETDATE() FROM INSERTED
END
答案 2 :(得分:0)
当然可以使用触发器。但为什么? 您可以在更新主表时更新历史记录表,并将所有业务逻辑保留在一个位置。
我记得在过去,在编程SQL2000研讨会期间,它被告知: "避免使用触发器。在大多数情况下,他们试图解决设计问题。"