通过查看其他示例,我得出了以下结论,但它似乎并不像我希望的那样工作:我希望它只在QtyToRepair值已更新的情况下更新修改后的信息...但事实并非如此.

如果我把where注释掉,那么修改后的信息在任何情况下都会更新.正如我所说,其他例子让我感到乐观.谢谢你提供任何线索.谢谢

沃尔特

ALTER TRIGGER [dbo].[tr_SCHEDULE_Modified]
   ON [dbo].[SCHEDULE]
   AFTER UPDATE
AS 
BEGIN
    SET NOCOUNT ON;

    UPDATE SCHEDULE SET modified = GETDATE()
        , ModifiedUser = SUSER_NAME()
        , ModifiedHost = HOST_NAME()
    FROM SCHEDULE S
    INNER JOIN Inserted I on S.OrderNo = I.OrderNo and S.PartNumber = I.PartNumber
    WHERE S.QtyToRepair <> I.QtyToRepair
END

推荐答案

你有两种方式来回答你的问题:

1-在触发器中使用Update命令.

ALTER TRIGGER [dbo].[tr_SCHEDULE_Modified]
   ON [dbo].[SCHEDULE]
   AFTER UPDATE
AS BEGIN
    SET NOCOUNT ON;
    IF UPDATE (QtyToRepair) 
    BEGIN
        UPDATE SCHEDULE 
        SET modified = GETDATE()
           , ModifiedUser = SUSER_NAME()
           , ModifiedHost = HOST_NAME()
        FROM SCHEDULE S INNER JOIN Inserted I 
        ON S.OrderNo = I.OrderNo and S.PartNumber = I.PartNumber
        WHERE S.QtyToRepair <> I.QtyToRepair
    END 
END

2-在插入的表和删除的表之间使用联接

ALTER TRIGGER [dbo].[tr_SCHEDULE_Modified]
   ON [dbo].[SCHEDULE]
   AFTER UPDATE
AS BEGIN
    SET NOCOUNT ON;    

    UPDATE SCHEDULE 
    SET modified = GETDATE()
       , ModifiedUser = SUSER_NAME()
       , ModifiedHost = HOST_NAME()
    FROM SCHEDULE S 
    INNER JOIN Inserted I ON S.OrderNo = I.OrderNo and S.PartNumber = I.PartNumber
    INNER JOIN Deleted D ON S.OrderNo = D.OrderNo and S.PartNumber = D.PartNumber                  
    WHERE S.QtyToRepair <> I.QtyToRepair
    AND D.QtyToRepair <> I.QtyToRepair
END

当您对表SCHEDULE使用update命令并将QtyToRepair列设置为新值时,如果一行或多行中的新值等于旧值,解决方案1将更新计划表中所有更新的行,但解决方案2仅更新旧值不等于新值的计划行.

Sql相关问答推荐

如何用3个(半)固定位置建模团队,并有效地搜索相同/不同的团队?

将重复的值更新为下一个空闲数字

防止ActiveRecord迁移在db/structure.sql中进行巨大更改

在SQL中返回缺省值,即使查询不返回任何结果

根据开始日期和结束日期的差异计算每天的计费

在SQL Server中设置关联对象的有效JSON格式

使用SQL数据库中的现有列派生或修改几个列

TSQL如何为群分配号码

在VB.NET中如何在MS Access数据库中创建SQL项目历史库存卡

此过程如何在不引用传递的参数值的情况下执行工作?

如何在多列上编写具有不同条件的查询?

SQL根据另一列的顺序和值获取组中的最后一列

SQL Select 字母范围没有给我任何东西

获取多个开始-结束时间戳集之间经过的时间

计算 ID 满足条件的次数

SQL Server - 复杂场景 - 比较状态并填充值到后续行

BigQuery导航函数计算ID

所有列分组的简写?

查询以查找今天和昨天的数据之间的差异以及伪列

在 postgresql 中保存带有时间戳的几何类型数据