Angenommen, ich habe die folgende Tabelle T1
:Summe alle eingegebenen Werte in Trigger-
| type | col1 | col2 |
|------|------|------|
| abc | 0 | 0 |
| def | 0 | 3 |
| abc | 3 | 123 |
| def | 0 | 5 |
| def | 2 | 4 |
Von Zeit zu Zeit einige neue Werte in T1
eingefügt werden. Ich möchte nun einen Trigger erstellen, der eine andere Tabelle T2
auffüllt, je nach den T1
eingetragenen Werten.
die Werte in T2
einfügen kann mit dem folgenden Pseudocode berechnet werden:
IF col1 = 0 AND col2 = 0
A++
ELSE IF col1 = 0 col2 > 0
B++
ELSE IF col1 > 0
C++
I bereits die folgenden Trigger erstellt:
Create TRIGGER TRI1
ON dbo.T1
FOR INSERT
AS
BEGIN
INSERT INTO dbo.T2
SELECT Sum(CASE WHEN col1 = 0 AND col2 = 0 THEN 1 END) as 'A',
Sum(CASE WHEN col1 = 0 AND col2 > 0 THEN 1 END) as 'B',
Sum(CASE WHEN col1 > 0 THEN 1 END) as 'C'
FROM INSERTED
END
Als ich es mit Test:
bekomme ich folgende Ausgabe:
| A | B | C |
|------|------|------|
| NULL | NULL | 1 |
| 1 | NULL | NULL |
| NULL | 1 | NULL |
| 1 | NULL | NULL |
Aber die erwartete Ausgabe ist nur 1 Zeile pro Einfügevorgang:
| A | B | C |
|---|---|---|
| 2 | 1 | 1 |
'INSERT INTO dbo.T1 WERTE ('abc', 2,3), ('abc', 0,0), ... 'eine Operation. 'einfügen in ...; einfügen in ...; '- zwei – Mike
Yeap .... Ihr Code tut genau das, was es soll. Es erzeugt 1 Reihe für jeden Einsatz. Gibt es etwas anderes, was du erwartest? Oder müssen Sie mehrere Zeilen in eine einzige insert-Anweisung einfügen, um dies zu testen? –
Sie haben 4 einfügen, so dass Sie 4 verschiedene Operationen haben, und eine Zeile por einfügen Operation. Das Verhalten ist in Ordnung. –