私はテストしているSQLクエリを以下のように実行していますが、毎回異なるデータを返すように見えて、私はそれが働いているかどうかをチェックするときに行の異なる量!私はそれを複数回実行し、最終的なselect文は25-32行の間のどこかに戻りますが、どのように変更できますか?SQLアップデート、同じクエリ、毎回異なる結果
同じデータを扱うのにbegin tran
とrollback tran
を使用していますが、これは問題ではないと思います。誰でも私が間違っていることを見つけることができますか?
Idのペアであり、テーブルに存在し、そのペアにフラグが設定されている場合、顧客アドレスにフラグ(IsPrimaryAddress)を設定するテーブル(#AddressToDeleteMasterOfLesserId
)で動作します。 #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
OF COURSE !!!!これは私がもう一度それを見ると完全に意味をなさない。私はこれを回避する方法について別の質問をしますが、代替案を「何もしない」方法があるかどうか知っていますか? –