Создание триггера, который заменяет пустые значения во вставке значениями, уже представленными в таблице на SQL Server - PullRequest
0 голосов
/ 14 января 2020

У меня есть таблица, известная как Fruit_Veg_Product_Table, которая используется для определения характеристик определенного запаса фруктов и овощей.

В таблице есть следующие столбцы:

Product_ID
Product_Type
Product_Name
Product_Colour
Product_Price
Product_In_Sale
Product_Stock_Level
Product_Height
Product_Width
Product_Depth
Product_Package_Height
Product_Package_Width
Product_Package_Depth

Когда новый продукт вставляется в таблицу, иногда продукт вставляется без каких-либо размеров (столбцы от Product_Height до Product_Package_Depth). В этом случае измерения вводятся как NULL.

Мне нужен триггер сервера SQL, который заменит все значения NULL из попытки вставки значениями, соответствующими продуктам, которые уже сохранены в таблица, которая имеет общий Product_Type с продуктом, который вводится.

Любая помощь с этой проблемой очень ценится.

1 Ответ

0 голосов
/ 14 января 2020

Триггеры имеют INSERTED логическую таблицу, которую можно использовать для объединения вставленных данных строки обратно в физическую таблицу. Вот пример:

CREATE TRIGGER Fruit_Veg_Product_Table_Trg
ON dbo.Fruit_Veg_Product_Table
FOR INSERT
AS
UPDATE dbo.Fruit_Veg_Product_Table
SET Product_Package_Height = ca.Product_Package_Height,
    Product_Package_Width = ca.Product_Package_Width,
    Product_Package_Depth = ca.Product_Package_Depth
FROM dbo.Fruit_Veg_Product_Table
    CROSS APPLY
(
    SELECT TOP 1
           Product_Package_Height,
           Product_Package_Width,
           Product_Package_Depth
    FROM dbo.Fruit_Veg_Product_Table AS fvpt
    WHERE dbo.Fruit_Veg_Product_Table.Product_Type = fvpt.Product_Type
          AND Product_Package_Height IS NOT NULL
          AND Product_Package_Width IS NOT NULL
          AND Product_Package_Depth IS NOT NULL
) AS ca
WHERE EXISTS
(
    SELECT *
    FROM INSERTED
    WHERE INSERTED.Product_ID = dbo.Fruit_Veg_Product_Table.Product_ID
          AND INSERTED.Product_Package_Height IS NULL
          AND INSERTED.Product_Package_Width IS NULL
          AND INSERTED.Product_Package_Depth IS NULL
);

GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...