SQL Server Увеличение счетчика в обновлении - PullRequest
2 голосов
/ 22 июля 2011

Я обновляю некоторые столбцы и увеличиваю счетчик каждый раз, когда меняю строку.

Оператор обновления является результатом объединения (упрощенный код ниже):

update @to
    set
        t.num += 1
    from @to t
    join @source s
        on t.id = s.id

Когда я обновляю одну строку более одного раза, столбцы содержат последнее значение (как и должно быть), но счетчик увеличивается только один раз. Поэтому, если соединение возвращает (id = 1, id = 1), моя таблица содержит (id = 1, num = 1), а не (id = 1, num = 2).

Есть способы обойти это (например, еще одно объединение на выбранном счетчике), но мне интересно, есть ли способ сделать это простым.

1 Ответ

2 голосов
/ 22 июля 2011

На самом деле нет способа получить счет без получения счета.Вот один из способов сделать это (и все еще только один раз ссылающийся на @source):

;WITH s AS
(
  SELECT id, c = COUNT(*)
    FROM @source 
    GROUP BY id
)
UPDATE t SET t.num += s.c
  FROM @to AS t
  INNER JOIN s
  ON t.id = s.id;

Надеемся, что строки, заканчивающиеся в @source, уже отфильтрованы до тех, которые также будут найдены в @to,Если нет, вы можете добавить дополнительные условия к исходному CTE.

...