【发布时间】:2012-03-21 02:56:23
【问题描述】:
我有一个正在测试的 SQL 查询,运行如下,但我注意到它似乎每次都返回不同的数据,然后我意识到当我检查它是否有工作!我已经运行了多次,最终的 select 语句将返回 25-32 行之间的某个位置,但是如何改变呢?
我正在使用begin tran 和rollback tran 处理相同的数据,但不要相信这是问题所在。谁能发现我做错了什么?
它适用于一个表 (#AddressToDeleteMasterOfLesserId),它是一对 Id,并在客户地址上设置一个标志 (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
【问题讨论】:
标签: sql sql-server-2008 sql-update