ребят, есть огромная таблица orders на десятки миллионов записей. Пытаюсь выполнить запрос ниже, получаю Sql Error 596 state 1, Cannot continue the execution because the session is in the kill state. В большиснтве тем в гугле ссылаются на недостаток места на диске при операции или тому подоюное, DBCC CheckDB проблем не находит. Места на диске достаточно, единственное оперативки не так много как хотелось бы. update orders set orders.IsInternalDeliveryPaid = ( CASE WHEN ( (select COUNT(*) from payments p where p.OrderId = orders.Id and p.Note = 'Платеж внутренней доставки') = 2 or (select COUNT(*) from transactions t left join transaction_accounting a ON t.Id = a.[Transaction] where t.OrderId = orders.Id and a.Type = 4 and Note = 'Платеж внутренней доставки') > 0 ) THEN 2 ELSE 3 END ) where orders.Status NOT IN (7, 8) and orders.IsInternalDeliveryPaid IS NULL and orders.InternalDeliveryCost > 0 Вопрос: насколько я понимаю, проблема в огроной первоначальной выборке. Если так, то поможет ли разбитие по тайм-периодам, аля обёртывания в конструкцию: DECLARE
@date2 date = (select MIN(CreatedDate) from orders); WHILE
@date2 <= GETDATE() BEGIN MY_SELECT_WITH_DATE_PERIOD_AS_CONDITION SET
@date2 = DATEADD(year, 1,
@date2); WAITFOR DELAY '00:00:01.000' END Ведь в данном случае ордера будут выгребаться в цикле по датам, что уменьшит их количество в одной итерации. Спрашиваю, потому что не уверен как работает скл-сервер и не держит ли он все итерации в памяти в любом случае. Тогда это не имеет смысла.