すべてのビューを特定のページに記録するテーブル Views にトリガーがあります。このトリガーは、挿入されたフィールドによって導出される必要がある合計ビューで会社テーブルを更新します。実際には、1 つの会社が複数のビューを取得することはありません (すべてを選択して 1 つ追加するだけで十分です) が、私は安全にコーディングするのが好きなので...
企業: ID、ビュー
CompanyViews: Id、CompanyId
必要なトリガー:
UPDATE Companies
SET Views = Views + (SELECT Count(1) FROM INSERTED AS i WHERE i.CompanyId = Id)
WHERE Id IN (SELECT DISTINCT(CompanyId) FROM INSERTED)
しかし、これは...うまくいきません。理由はよくわかりませんが、基本的に意図した結果は次のとおりです。
Id, CompanyId
1 2
2 2
3 3
4 5
5 2
6 3
この場合、会社 2 は 3 つのビューを取得し、会社 3 は 2 つのビューを取得し、会社 5 は 1 つのビューを取得します。
クエリが失敗した場合、どうすればよいですか?
編集:「機能しない」とは、値が変更されないことを意味します。実際、検出した行 (つまり、DISTINCT 値) の代わりに NULL を挿入します。Views + を省略すると、単純に 0 になります。