【问题标题】:SQL Server trigger for changing value of column of inserted row according to delta from other table after insert?插入后根据其他表的增量更改插入行列的值的SQL Server触发器?
【发布时间】:2018-12-10 15:07:40
【问题描述】:

我的 SQL Server 数据库中有 2 个表,例如 [Camera][CameraData]。由于[Camera] 中的增量,如何编写一个触发器,该触发器将在将行插入[CameraData] 后更改[CameraData] 中的值。

例如我们在[Camera]有2个摄像头:

  • 相机 1,{id}​​ = 1 且 {delta} = null
  • 相机 2,{id}​​ = 2 和 {delta} = 3

所以当我们自动插入表 [CameraData] 时,f.e. :

Id_camera = 2, angle = 30, Changed = null 

在这种情况下,我们需要检查相机 2 上的 [Camera] 是否有 delta,如果是这样,我们需要将 insert 修改为:

Id_camera = 2, angle = 33 (angle + Camera.Delta), Changed = True

更新 1

根据评论[3]是表[CameraData]中放置角度的列

CREATE TRIGGER Delta_Angle
ON CameraData
AFTER INSERT
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE CameraData
    SET DeltaFlag = 1, [3] = inserted.[3] + i.DeltaAngle
    FROM CameraData h
    INNER JOIN Camera i ON h.ID_Camera = i.ID_Camera
    WHERE i.DeltaAngle != ''
END

【问题讨论】:

  • 所以你想把CameraDataangle的值改成angle + inserted.delta?表CameraData 中该相机的所有行都是这样吗?到目前为止,您为实现这一目标做了哪些尝试?
  • @Larnu,不,我想将 'CameraData' 中的 'angle' 更改为 angle + 'Camera.delta' 如果我们在相机上具有相同的 pk 插入和相机在 'Camera' 如果最后一个有 delta != 0
  • 是的,您可以为此使用触发器。如果您需要编码帮助,您需要提供一些详细信息。 Here 是一个很好的起点。
  • 这不是我说的吗..?不过,请分享您的尝试,并按照 Sean 的建议进行更新。
  • @Larnu 用我的代码更新了问题,但我不知道是不是这样

标签: sql-server database triggers


【解决方案1】:

这在很大程度上是在黑暗中刺伤,因为您的示例 SQL 根本不能代表您在问题中描述的数据,但是,也许类似于:

CREATE TRIGGER Delta_Angle ON CameraData
AFTER INSERT AS
BEGIN
    SET NOCOUNT ON;

    UPDATE C
    SET Angle = C.Angle + i.delta
    FROM Camera
         JOIN inserted i ON C.CameraID = i.CameraID;
END

注意我指的是inserted;你的触发器不是。另外,我不确定您的条款i.DeltaAngle != ''。考虑到DeltaAngle 似乎是int,它永远不可能有'' 的值(但是,'' 将被隐式转换为值0)。

如果这没有帮助,我(再次)建议您阅读 Sean 的链接并相应地更新您的帖子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    相关资源
    最近更新 更多