sql - 创建一个触发器,将插入中的空值替换为 SQL Server 表中已存在的值
问题描述
我有一张桌子,被称为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 Server 触发器,它将尝试插入的所有 NULL 值替换为与已存储在表中的产品相对应的值,Product_Type
这些产品与正在输入的产品共享一个共同点。
非常感谢您对此问题的任何帮助。
解决方案
触发器有一个 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
推荐阅读
- c# - C# tls1.3 异常:无法确定帧大小或收到损坏的帧
- moodle - R/exams Moodle:数字和字符串项目的完形填空
- azure - Azure Functions 中的默认 logLevel 阈值是多少?
- autodesk-forge - 从 svg 标记字符串重新加载自定义工具
- javascript - 控制要从对象拖放的内容
- javascript - 类型'{可见性:字符串;'line-join': 字符串;'line-cap': 字符串;} | { 可见性:字符串;}' 不可分配给类型
- c++ - HoughCircles()圆检测opencv c ++的正确阈值
- vue.js - Vue 永远不会分配活动类
- python - 如何在不同的浏览器标签页(Selenium、Python)中打开和操作?
- vba - MS Word:获取插入符号的实际 ASCII 码