Ik heb de volgende twee tabellen:
TabelA.TabelAID en TabelB.TabelBID zijn de primary keys.
Nu heb ik op TabelB de volgende 3 triggers gemaakt:
en
Het is dus de bedoeling om met die triggers het veld AantalB consistent te houden. Het lukt mij alleen niet om een goede update trigger te schrijven. Degene die hier boven staat klopt niet. Heeft iemand een suggestie over hoe ik dit aan kan pakken? Het is belangrijk om er rekening mee te houden dat er meerdere rijen in één transactie geupdate kunnen worden.
*edit: ook de insert en delete trigger blijken niet te werken bij het toevoegen of verwijderen van meerdere records met verschillende ID's uit tabelB.
code:
1
2
3
4
5
6
7
| --------------- ---------------
| TabelA | | TabelB |
--------------- ---------------
| TabelAID |--- | TabelBID |
| AantalB | ----| TabelAID |
--------------- | Waarde |
--------------- |
TabelA.TabelAID en TabelB.TabelBID zijn de primary keys.
Nu heb ik op TabelB de volgende 3 triggers gemaakt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER dbo.TabelBDelete
ON dbo.TabelB
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
UPDATE TabelA SET AantalB = AantalB - (SELECT Count(*) FROM Deleted) WHERE TabelAID IN (SELECT TabelAID FROM Deleted)
END
GO |
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER dbo.TabelBInsert
ON dbo.TabelB
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE TabelA SET AantalB = AantalB + (SELECT Count(*) FROM Inserted) WHERE TabelAID IN (SELECT TabelAID FROM Inserted)
END
GO |
en
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER dbo.TabelBUpdate
ON dbo.TabelB
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE TabelA SET AantalB = AantalB - (SELECT Count(*) FROM Inserted JOIN Deleted ON Inserted.TabelBID = Deleted.TabelBID) WHERE TabelAID IN (SELECT Deleted.TabelAID FROM Inserted JOIN Deleted ON Inserted.TabelBID = Deleted.TabelBID);
UPDATE TabelA SET AantalB = AantalB + (SELECT Count(*) FROM Inserted JOIN Deleted ON Inserted.TabelBID = Deleted.TabelBID) WHERE TabelAID IN (SELECT Inserted.TabelAID FROM Inserted JOIN Deleted ON Inserted.TabelBID = Deleted.TabelBID);
END
GO |
Het is dus de bedoeling om met die triggers het veld AantalB consistent te houden. Het lukt mij alleen niet om een goede update trigger te schrijven. Degene die hier boven staat klopt niet. Heeft iemand een suggestie over hoe ik dit aan kan pakken? Het is belangrijk om er rekening mee te houden dat er meerdere rijen in één transactie geupdate kunnen worden.
*edit: ook de insert en delete trigger blijken niet te werken bij het toevoegen of verwijderen van meerdere records met verschillende ID's uit tabelB.
[ Voor 4% gewijzigd door licensed op 26-01-2006 20:21 ]