Использование подзапросов в операторе обновления - PullRequest
0 голосов
/ 19 апреля 2009

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

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

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

Ответы [ 2 ]

2 голосов
/ 19 апреля 2009
UPDATE bk2_InfoPages
SET SortOrder = SortOrder - (SELECT COUNT(*) FROM Deleted d WHERE d.SortOrder <= bk2_InfoPages.SortOrder)
1 голос
/ 19 апреля 2009

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...