2009-04-19 6 views
0

j'ai l'instruction SQL suivante dans un déclencheur qui sur la suppression:Utilisation subquerys dans la déclaration de mise à jour

UPDATE bk2_InfoPages 
SET SortOrder = SortOrder - (SELECT COUNT(*) FROM Deleted d WHERE d.SortOrder <= SortOrder) 

Mon problème est que la dernière SortOrder se réfère à la table Deleted et non à la table bk2_InfoPages. Je ne suis pas autorisé à ajouter un alias à la table bk2_InfoPages car il s'agit d'une instruction UPDATE - que dois-je faire à la place?

Répondre

1

Cela devrait fonctionner:

UPDATE b 
SET SortOrder = SortOrder - 
    (SELECT COUNT(*) FROM Deleted d WHERE d.SortOrder <= b.SortOrder) 
from bk2_InfoPages b 

Vous avez un alias de votre table pour faire des sous-requêtes, par exemple:

-- this executes fine 
create table #t (t int) 

update t 
set t = (select count(*) from #t t1 where t.t = t1.t) 
from #t t 
+0

Cela a fait l'affaire! Merci! =) –

2
UPDATE bk2_InfoPages 
SET SortOrder = SortOrder - (SELECT COUNT(*) FROM Deleted d WHERE d.SortOrder <= bk2_InfoPages.SortOrder) 
+0

Malheureusement, je reçu le message d'erreur suivant lorsque vous essayez d'exécuter la Instruction ALTER TRIGGER: "L'identificateur en plusieurs parties" bk2_InfoPages.SortOrder "ne peut pas être lié." –

Questions connexes