【问题标题】:Sql server: update new record on insertSql server:在插入时更新新记录
【发布时间】:2009-09-04 12:06:11
【问题描述】:

使用“Northwind”示例:

我想在 OrderDetails 表上创建一个插入触发器,以便每次插入 OrderDetail 时,它都会获取 Products 表中定义的 UnitCost 的当前值。

应该是这样的,但我很难把它弄好。你能帮忙吗?

创建触发器触发器1 ON OrderDetails as od 插入 作为 -- 节省单位成本 od.unitCost = (从 Products 中选择 UnitCost 作为 p 其中 p.ProductId = i.ProductId )

我使用的是 SQL Server 2008。 谢谢!

【问题讨论】:

    标签: sql sql-server database triggers


    【解决方案1】:

    您必须将inserted 表加入orderdetails 表才能找出插入的内容。像这样:

    CREATE TRIGGER Trigger1
    ON OrderDetails as od
    FOR INSERT
    AS
    BEGIN
    
        update od
        set unitcost = p.unitcost
        from 
            orderdetails od
            inner join inserted i on
                od.orderlineid = i.orderlineid
            inner join produts p on
                p.productid = od.productid
    
    END
    

    【讨论】:

    • 感谢 Eric 的快速回答
    • 只是给其他人的说明:Sql Server 似乎不喜欢“插入后”。但是“FOR INSERT”可以完成这项工作。
    • @iDevlop:好电话。我一直在回答太多 MySQL 触发问题 :)
    • 如果我想添加一个条件,只在插入的记录在 unitcost 中为 NULL 时才进行更新,我应该把那个条件放在哪里?我尝试了几件事,包括在最后一个 END 之前的 WHERE i.productId IS NULL,但这似乎不起作用。
    猜你喜欢
    • 1970-01-01
    • 2015-12-17
    • 2020-11-21
    • 2016-03-14
    • 1970-01-01
    • 2013-12-06
    • 2017-12-17
    • 2017-04-03
    • 1970-01-01
    相关资源
    最近更新 更多