Привет всем, так что я создал таблицу под названием ProductsAudit, который выглядит примерно так:SQL с помощью триггеров Для занесения Новая таблица
CREATE TABLE ProductsAudit
(
AuditID INT NOT NULL PRIMARY KEY,
ProductID INT NOT NULL,
CategoryID INT NULL,
ProductCode VARCHAR(10) NOT NULL,
ProductName VARCHAR(255) NOT NULL,
ListPrice MONEY NOT NULL,
DiscountPercent MONEY NOT NULL,
DateUpdated DATETIME NULL
);
ProductsAudit таблица почти идентична другой таблицы называется Продукты:
ProductID (PK, int, NOT NULL)
CategoryID (FK, int, NULL)
ProductCode (varchar(10), NOT NULL)
ProductName(varchar(255), NOT NULL)
Description(Text, NOT NULL)
ListPrice(money, NOT NULL)
DiscountPercent(money, NOT NULL)
DateAdded(datetime, NULL)
Затем я создал триггер под названием Products_UPDATE, который должен вставлять данные из таблицы Products в таблицу ProductAudit после обновления строки в продуктах.
CREATE TRIGGER Products_UPDATE
ON Products
AFTER UPDATE
AS
INSERT INTO ProductsAudit (AuditID, ProductID, CategoryID, ProductCode,
ProductName, ListPrice, DiscountPercent, DateUpdated)
SELECT
i.ProductID, i.ProductID, i.CategoryID, i.ProductCode,
i.ProductName, i.ListPrice, i.DiscountPercent, i.DateAdded
FROM inserted i
JOIN ProductsAudit pa ON pa.ProductID = i.ProductID
Теперь я предполагаю, что неправильно создаю свой триггер, потому что он, похоже, не работает. Например, я могу обновить таблицу продуктов следующим образом:
UPDATE PRODUCTS
SET ProductCode = 'ABC1233'
WHERE ProductID = 18;
SELECT * FROM Products;
SELECT * FROM ProductsAudit;
Строка в продуктах обновляется правильно, однако я не получаю никаких данных, вставленных в таблицу ProductsAudit.
Кто-нибудь знает, что я делаю неправильно? Любая помощь будет принята с благодарностью! Благодаря!
Ваш запрос присоединяется к ProductsAudit как часть вставки. Не совсем уверен, что вы пытаетесь сделать, но, вероятно, это проблема. Кроме того, вам действительно нужно изменить свой текстовый тип данных на varchar (max). Или даже разумный размер varchar. Текст устарел в течение 10 лет и не должен использоваться. –
Этот триггер laguage может вообще не работать в mysql. Триггеры очень специфичны для базы данных. – HLGEM