[2005] Problème de syntax ?
Bonjour,
Je n'arrive pas à comprendre en quoi un trigger que j'ai écrit est mal rédigé.
En effet, lorsque que j'essaie d'exécuter le query de création, j'ai cette erreur qui se manifeste :
Citation:
Msg 4104, Level 16, State 1, Procedure tMembers_AFUPDATE, Line 25
The multi-part identifier "I.Id" could not be bound.
Msg 4104, Level 16, State 1, Procedure tMembers_AFUPDATE, Line 25
The multi-part identifier "D.FederalNumber" could not be bound.
Voici mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[dbo].[tMembers_AFUPDATE]'))
DROP TRIGGER [dbo].[tMembers_AFUPDATE]
GO
CREATE TRIGGER tMembers_AFUPDATE
ON tMembers
AFTER UPDATE
AS
BEGIN
/*
A member with no FederalNumber is a member know of Mygolf only.
So we're sure we have to send a synchro message when the federal number is set with an UPDATE.
Members from other system than mygolf, will be created (INSERT) with a federalnumber.
*/
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @SynchroMembers TABLE
(
IdMember BIGINT
, IdClub INT
, Federated BIT
);
WITH concernedClubs
(
IdClub
)
AS
(
SELECT
C.Id
FROM tClubs AS C
WHERE C.IsMygolf = 1
AND C.Federal = 1
)
INSERT @SynchroMembers
(
IdMember
, IdClub
, Federated
)
SELECT
I.Id
, C.IdClub
, CASE WHEN D.FederalNumber = '' THEN 0 ELSE 1 END AS Federated
FROM inserted AS I
INNER JOIN deleted AS D ON (
D.Id = I.Id
)
CROSS JOIN (
/*
Retrieve the MyGolf Home Club for any operation (which are supposed to come from the Home Club).
Or any MyGolf Club for a federal number attribution.
*/
SELECT CM.IdClub
FROM tClubMembers AS CM
INNER JOIN concernedClubs AS C ON (
C.IdClub = CM.IdClub
)
WHERE CM.IdMember = I.Id
AND (
IsHomeclub = 1
OR
D.FederalNumber = ''
)
) AS C
WHERE I.FederalNumber <> ''
[...] |
Ce qui est très curieux, c'est que si je retire la CTE, aucune erreur n'est présentée.
Je suis plus que perplexe.
Pouvez-vous m'aider ?
Merci.