我创建了一个名为ProductsAudit的表,它用于在触发器更新后从MyGuitarShop产品表中保存值,但似乎无法获得它工作。我在SQL Server中这样做。将更新前的值放入带触发器的另一个表中
所以我需要发生的是产品更新时,它将旧值存储到ProductsAudit表中。
CREATE TABLE ProductsAudit
(
AuditID int NOT NULL,
CategoryID int,
ProductCode varchar(10) NOT NULL,
ProductName varchar(255) NOT NULL,
ListPrice money NOT NULL,
DiscountPercent money NOT NULL,
DateUpdated datetime
PRIMARY KEY (AuditID)
FOREIGN KEY (CategoryID) REFERENCES Categories(CategoryID)
)
CREATE TRIGGER Products_UPDATE2
ON Products
AFTER UPDATE
AS
BEGIN;
ROLLBACK TRAN
INSERT INTO ProductsAudit
SELECT CategoryID, ProductCode, ProductName, ListPrice, DiscountPercent
FROM Deleted
WHERE CategoryID = (SELECT CategoryID FROM Inserted);
PRINT 'Old data sent to ProductsAudit'
END;
UPDATE Products
SET ListPrice = 79.43
WHERE ProductID = 3;
你的表有7列,但你的'SELECT'只有5个字段。 在你的CREATE TABLE脚本中,AuditID是一个PRIMARY KEY,但它不是'IDENTITY'。意思是,如果你想在表中插入一条记录,你必须指定一个“AuditID”。 此外,你没有选择任何'DateUpdated'。也许你希望这有一个默认的'GETDATE()'? – Santi