3

NULL 値を許可する列 isStaff (ビット) を含むテーブル Person があります。

目的は、このフィールドに値 0/1 が含まれている必要があることです。ただし、そもそもユーザー入力のアプリケーション処理が不足しているため、この列には NULL 値を持つ複数のレコードがあります。

このクエリを実行しようとすると:

UPDATE Person
SET isStaff = 0
WHERE isStaff IS NULL

エラーが発生します:

サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。

この問題を解決する方法はありますか?

4

1 に答える 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)

もちろん、これは、テーブルにトリガーがあるかどうか、およびある場合はトリガーが何をしているのかを確認できるまで、すべて推測です。

于 2012-09-06T20:19:29.897 に答える