Обновление совокупного столбца в вопросе изоляции - PullRequest
2 голосов
/ 06 августа 2010

У меня есть таблица сделок и транзакций, где в таблице сделок есть агрегированный столбец TotalSales, который представляет собой просто количество транзакций на сделку.

С помощью следующей команды существует ли вероятность того, что количество строк транзакций и общее количество продаж не будут синхронизированы (не считая удаления строк)? Работает ли для этого уровень изоляции по умолчанию? У нас много пользователей, делающих покупки в одно и то же время, поэтому я пытаюсь найти лучший способ справиться с этим.

BEGIN TRANSACTION
INSERT INTO [transaction] ... 

UPDATE deal
SET TotalSales = (select count(*) from [transaction] where dealid = @dealId)
WHERE dealId = @dealId 
COMMIT TRANSACTION

1 Ответ

1 голос
/ 06 августа 2010

Я предпочитаю использовать подобные представления:

CREATE VIEW vw_sales AS
AS 
       SELECT t.dealid, 
                   COUNT(*) AS total_sales
          FROM TRANSACTION t
  GROUP BY t.dealid

Меньше хлопот, связанных с синхронизацией значения, избыточные данные не сохраняются ...

Это простокак восприимчивый к проблемам уровня изоляции - по умолчанию считывание зафиксированных данных.Чтение незафиксированных данных для общего объема продаж было бы Плохо (тм).

...