更新一个列中为NULL的数据

3

我有一个名为Person的表,其中包含一个isStaff列(位),允许空值。

这个字段的目的是必须包含0/1的值;然而,由于应用程序在第一时间没有处理用户输入,所以在这个列中存在多个空值记录。

如果我尝试执行此查询:

UPDATE Person
SET isStaff = 0
WHERE isStaff IS NULL

我遇到了以下错误:
子查询返回了多个值。当子查询跟随=、!=、<、<=、>、>=时,或者当子查询用作表达式时,不允许这样做。
有什么解决方法吗?

9
那是你运行的实际查询吗?那里没有子查询。 - Adam Wenger
8
我想知道“Person”表是否有某种丑陋的触发器,在该触发器中使用整个“inserted”表进行等值比较。 - LittleBobbyTables - Au Revoir
刚刚测试了一下,这很可能是原因。Person表上有哪些触发器? - Ghost
1个回答

5

如果您发布的确切问题就是这样,那么我倾向于相信您在Person表上有一个触发器,而您甚至没有意识到。

我也倾向于相信它正在执行以下操作:

UPDATE SomeOtherTable
SET SomeColumn = 1
WHERE SomeOtherTable.ID = inserted.ID

使用触发器时,inserted 表包含所有被更新的记录,而不仅仅是单个记录,您可能需要像这样的内容:

UPDATE SomeOtherTable
SET SomeColumn = 1
WHERE ID IN (SELECT ID FROM inserted)

当然,这一切都只是猜测,直到你确认桌子上是否有触发器,如果有的话,触发器在做什么也需要确定。

或者他们正在将值设置为标量变量! - HLGEM
是的,那也是一个同样糟糕的可能性。 - LittleBobbyTables - Au Revoir
是的!!! LittleBobbyTables,你太聪明了,我完全忘记检查表是否有触发器。在执行此操作之前禁用触发器后,一切都很好。非常感谢!!! - user1653059

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接