У меня есть SQL-запрос, который я тестирую, и работает как показано ниже, но я заметил, что каждый раз он возвращал разные данные, тогда я понял, что он даже возвращал разное количество строк, когда я проверяю, сработало ли это! Я запустил его несколько раз, и окончательный оператор select вернется где-то между 25-32 строками, но как это может измениться?SQL Update, тот же запрос, разные результаты каждый раз
Я использую begin tran
и rollback tran
для работы над одними и теми же данными и не считаю, что это проблема. Может ли кто-нибудь определить, что я сделал неправильно?
Он работает на столе (#AddressToDeleteMasterOfLesserId
), который является парами идентификаторов и устанавливает флаг (IsPrimaryAddress) на адрес клиента, если он существует в таблице, а в его паре установлен флаг. #AddressToDeleteMasterOfLesserId
уже определен и не изменяется.
begin tran t1
select CustomerAddress.IsPrimaryAddress, p1.[Id that is master],p1.[Id to delete], c2.IsPrimaryAddress
FROM CustomerAddress
join #AddressToDeleteMasterOfLesserId p1 on CustomerAddress.Id=p1.[Id that is master]
join CustomerAddress c2 on p1.[Id to delete]=c2.Id
order by [Id that is master]
--Update primary address
UPDATE CustomerAddress
SET IsPrimaryAddress = CASE WHEN c2.IsPrimaryAddress=1 THEN 1 ELSE 0 END
FROM CustomerAddress
join #AddressToDeleteMasterOfLesserId p1 on CustomerAddress.Id=p1.[Id that is master]
join CustomerAddress c2 on p1.[Id to delete]=c2.Id
select CustomerAddress.IsPrimaryAddress, p1.[Id that is master],p1.[Id to delete], c2.IsPrimaryAddress
FROM CustomerAddress
join #AddressToDeleteMasterOfLesserId p1 on CustomerAddress.Id=p1.[Id that is master]
join CustomerAddress c2 on p1.[Id to delete]=c2.Id
where CustomerAddress.IsPrimaryAddress=0
and c2.IsPrimaryAddress=1
order by [Id that is master]
rollback tran t1
КУРС !!!! Теперь это имеет прекрасный смысл, когда я снова смотрю на него. Я задам еще один вопрос, как я могу обойти это, но знаете ли вы, есть ли способ, чтобы альтернативный случай «ничего не делал», настройка для себя не работает, поскольку он отключает первое чтение, которое дает неправильный ответ –