Ich habe die folgende Tabelle:Update-Trigger von select-Anweisung Schleife
SystemList System Value1 Value2 Value3 Value4 Total System1 10 30 40 System2 20 System3 10 30 System4 30 40
ich folgendes in einem Trigger haben, das funktioniert gut, aber ich möchte durch jedes der Systeme zu durchlaufen und die Summe jeder Zeile aktualisieren, ohne dies in Wirklichkeit 92 Mal tun müssen. Gibt es eine Möglichkeit, die Systeme zu durchsuchen und die Werte in dieser Zeile zu summieren, wenn ein Einfügen oder Aktualisieren durchgeführt wird?
Use Database
UPDATE dbo.SystemList
SET Total = (SELECT (COALESCE(Value1, 0) + COALESCE(Value2, 0) + COALESCE(Value3, 0) + COALESCE(Value4, 0)) AS Total
FROM dbo.SystemList where System = 'System1') Where System = 'System1'
UPDATE dbo.SystemList
SET Total = (SELECT (COALESCE(Value1, 0) + COALESCE(Value2, 0) + COALESCE(Value3, 0) + COALESCE(Value4, 0)) AS Total
FROM dbo.SystemList where System = 'System2') Where System = 'System2'
UPDATE dbo.SystemList
SET Total = (SELECT (COALESCE(Value1, 0) + COALESCE(Value2, 0) + COALESCE(Value3, 0) + COALESCE(Value4, 0)) AS Total
FROM dbo.SystemList where System = 'System3') Where System = 'System3'
UPDATE dbo.SystemList
SET Total = (SELECT (COALESCE(Value1, 0) + COALESCE(Value2, 0) + COALESCE(Value3, 0) + COALESCE(Value4, 0)) AS Total
FROM dbo.SystemList where System = 'System4') Where System = 'System4'
Mein eigentlicher Auslöser ist:
USE [Database]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Total]
ON [dbo].[SystemList]
AFTER INSERT,UPDATE
AS
Begin
UPDATE dbo.SystemList
SET Total = (SELECT (COALESCE(Value1, 0) + COALESCE(Value2, 0) + COALESCE(Value3, 0) + COALESCE(Value4, 0)) AS Total
FROM dbo.SystemList where System = 'System1') Where System = 'System1'
UPDATE dbo.SystemList
SET Total = (SELECT (COALESCE(Value1, 0) + COALESCE(Value2, 0) + COALESCE(Value3, 0) + COALESCE(Value4, 0)) AS Total
FROM dbo.SystemList where System = 'System2') Where System = 'System2'
UPDATE dbo.SystemList
SET Total = (SELECT (COALESCE(Value1, 0) + COALESCE(Value2, 0) + COALESCE(Value3, 0) + COALESCE(Value4, 0)) AS Total
FROM dbo.SystemList where System = 'System3') Where System = 'System3'
UPDATE dbo.SystemList
SET Total = (SELECT (COALESCE(Value1, 0) + COALESCE(Value2, 0) + COALESCE(Value3, 0) + COALESCE(Value4, 0)) AS Total
FROM dbo.SystemList where System = 'System4') Where System = 'System4'
End
Die erste Methode funktioniert hat, gab die zweite mir sehr seltsame Werte. Es scheint zu funktionieren, wenn es nur einen Wert in einer Spalte gibt, aber nicht, wenn es einen Wert in mehreren Spalten gibt. – pinchetpooche