En tant qu'utilisateur avec peu ou pas d'expérience, je dois créer un trigger sur une table (ou trouver une autre solution). Ce qui doit être accompli, c'est que lorsque la valeur de la colonne ESB est changée en '1' dans une autre ligne du tableau, la colonne doit être mise à '0'.MS SQL 2005 AFTER UPDATE déclenche la mise à jour d'une autre ligne que la mise à jour
Mon intention était d'utiliser un déclencheur AFTER UPDATE, pour ce faire.
ALTER TRIGGER [TR_PHOTO_UPD]
ON [SOA].[dbo].[photos_TEST]
AFTER UPDATE
AS
DECLARE @ID VARCHAR(10)
DECLARE @ESB VARCHAR(1)
SELECT @ID = (SELECT TOP(1) ID
FROM SOA.dbo.photos_TEST
WHERE esb = 'Q'
ORDER BY ARRIVALDATETIME ASC)
SELECT @ESB (SELECT esb FROM INSERTED)
IF @ESB = '1'
UPDATE SOA.dbo.photos_TEST SET esb = '0' WHERE ID = @I
Ceci, comme vous le savez probablement, ne fonctionne pas, ni la définition du déclencheur suivant.
ALTER TRIGGER [TR_PHOTO_UPD]
ON [SOA].[dbo].[photos_TEST]
AFTER UPDATE
AS
DECLARE @ID VARCHAR(10)
DECLARE @ESB VARCHAR(1)
SELECT @ID = (SELECT TOP(1) ID
FROM SOA.dbo.photos_TEST
WHERE esb = 'Q'
ORDER BY ARRIVALDATETIME ASC)
SELECT @ESB (SELECT esb FROM INSERTED)
IF @ESB = '1'
BEGIN
UPDATE SOA.dbo.photos_TEST
SET esb = '0'
WHERE id = (SELECT TOP(1) ID
FROM SOA.dbo.photos_TEST
WHERE esb = 'Q'
ORDER BY ARRIVALDATETIME ASC)
END
Après plusieurs heures de googler et d'essayer je n'ai pas encore trouvé pourquoi la ligne n'est pas mis à jour « 0 ». Je soupçonne que la mise à jour dans un déclencheur AFTER UPDATE est la raison pour laquelle cela ne fonctionne pas. Est-ce que quelqu'un a des allusions ou mieux une solution?
Cheers,
Peter
Il semble que vous souhaitiez que la ligne avec le dernier ID ajouté soit mise à jour chaque fois que la valeur 1 est insérée dans la colonne ESB, n'est-ce pas? –
Oui, exactement. Si une ligne est ajoutée, la valeur de ESB est 'Q'. Le déclencheur doit définir la valeur d'une ligne sur "0". Après cela, un adaptateur de base de données traite les données et modifie la valeur de 0-> R (eserved) -> 1 (traité). S'il y a des lignes avec ESB = 'Q', une ligne (la plus ancienne à la date d'arrivée) doit être mise à 0 pour lancer le traitement. – pcvnes