为什么我的 SQL 存储过程没有更新 table 中的特定值?

Why is my SQL stored procedure not updating a specific value in the table?

我有一个包含以下代码(简化和通用化)的存储过程:

UPDATE t
SET t.intFoo = @foo,
    t.intBar = @bar,
    t.intBaz = tst.intBaz
FROM dbo.myTable t,
     dbo.myOtherTable tst
WHERE (t.id = @myId)
AND (tst.alias = 'Alias')

@foo 是在存储过程中较早生成的,而 @bar 作为 int 参数传入。已知 intBar 在 table.

中的每一行都为空

调用存储过程后,当我检查数据库中更新的行时,我看到 intFoointBaz 已正确设置,但 intBar 仍然设置为空。即使我明确地将 intBar 的值硬编码为设置为:

,也会发生这种情况
UPDATE t
SET t.intFoo = 12345, --this gets stored in the targeted row
    t.intBar = 54321, --this does not; it remains null
    ...

intBar 是一个完全普通的列,没有任何限制或任何会阻止它被设置的东西:

...
[intBar] [int] NULL

我有 运行 隔离的存储过程,并确认 a) @bar 被正确传递并且不为空,b) intBar 的值是不被另一个存储过程覆盖。我试过 运行 只隔离 UPDATE 语句,而且 intBar 没有更新,而其他所有值都更新了。

这是怎么回事? 为什么我的存储过程更新了 一些 我要求它更新的值,而不是 他们全部

仔细检查后,发现 table 上控制更新的触发器。 (我最初无法找到它,因为这是非常混乱的遗留代码,没有任何东西是你期望的。)intBar 最近才添加到 table,并且一定没有添加到当时的触发器,因此未包含在更新中。

我更新了触发器以包含 intBar,现在它可以正常工作了。