저는 테스트 중이며 아래에서 실행중인 SQL 쿼리가 있지만 매번 다른 데이터를 반환하는 것처럼 보였습니다. 내가 행했을 때 행이 다른지 확인합니다. 여러 번 실행했고 마지막 select 문은 25-32 행 사이의 어떤 부분을 반환하지만 어떻게 바뀔 수 있습니까?SQL 업데이트, 동일한 쿼리, 매번 다른 결과가 발생했습니다.
동일한 데이터를 처리하기 위해 begin tran
및 rollback tran
을 사용하고 있으며 이것이 문제가되지는 않습니다. 아무도 내가 잘못한 것을 발견 할 수 있습니까 ??
Id (Id)의 쌍인 테이블 (#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
코스! 이것은 내가 그것을 다시 보았을 때 완벽하게 이해됩니다. 나는이 문제를 어떻게 해결할 수 있는지 또 다른 질문을 할 것이지만, 대체 사례가 '아무 것도하지 않는다'는 방법이 있는지 알고 있겠는가? 오답을주는 첫 번째 읽기가 끝나면 스스로 설정하는 것이 효과가 없다. –