2009-04-19 2 views
0

У меня есть следующий SQL заявление в качестве триггера, который срабатывает на удаление:Использование subquerys в заявлении Update

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

Моя проблема заключается в том, что самый последний SortOrder относится к Deleted таблице, а не к bk2_InfoPages таблице. Мне не разрешено добавлять псевдоним в таблицу bk2_InfoPages, потому что это оператор UPDATE - так что я должен делать вместо этого?

ответ

1

Это должно работать:

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

Вы должны псевдоним таблицы, чтобы сделать подзапросы, например:

-- 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

Это сделало трюк! Благодаря! знак равно –

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

К сожалению, я получил следующее сообщение об ошибке при попытке выполнить команду Вывод ALTER TRIGGER: «Идентификатор многочастности« bk2_InfoPages.SortOrder »не может быть связан». –

Смежные вопросы