У меня есть SQL-запрос, который я тестирую и выполняю, как показано ниже, но я заметил, что он, похоже, каждый раз возвращает разные данные, затем я понял, что он даже возвращает различное количество строк, когда я проверяю, есть ли у негоработал!!Я запустил его несколько раз, и последний оператор выбора вернется где-то между 25-32 строками, но как это можно изменить?
Я использую 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