首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL更新,相同的查询,每次不同的结果

SQL更新,相同的查询,每次不同的结果
EN

Stack Overflow用户
提问于 2012-03-21 10:56:23
回答 3查看 1.1K关注 0票数 1

我有一个SQL查询,我正在测试,并运行如下,但我注意到它似乎每次返回不同的数据,然后我意识到当我检查它是否工作时,它甚至返回了不同数量的行!!我已经运行了多次,最后的select语句将返回25-32行之间的某处,但是这种情况如何改变呢?

我正在使用begin tranrollback tran处理相同的数据,我不认为这是问题所在。有人能发现我做错了什么吗??

它在一个由Id对组成的表(#AddressToDeleteMasterOfLesserId)上工作,并在客户地址上设置一个标志(IsPrimaryAddress),如果客户地址存在于表中并且其对设置了标志。#AddressToDeleteMasterOfLesserId已经定义,并且不会更改。

代码语言:javascript
运行
复制
    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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-21 18:10:25

您的#AddressToDeleteMasterOfLesserId表必须包含一些对,其中相同的Id that is master与多个Id to delete配对,并且这些Ids to deleteCustomerAddress表中具有不同的匹配值IsPrimaryAddress

在更新阶段,这样的Id that is master行的IsPrimaryAddress被随机更新为1或0,这取决于选择哪个匹配的Id to delete行作为新值的源。

票数 1
EN

Stack Overflow用户

发布于 2012-03-21 11:53:53

这不会在每次运行中产生相同输出的唯一方法是,要么您正在执行此操作之外的其他操作,要么其他人正在执行此操作之外的其他操作,或者如果您有多个打开的事务,则可能会变得不可靠。如果是后者,并且/或者要测试它,只需运行ROLLBACK TRAN,直到您得到一个错误,指出没有打开的事务。如果你第一次得到这个错误,那么你没有任何打开。

票数 0
EN

Stack Overflow用户

发布于 2022-01-24 14:28:18

对我来说,这个问题是由于SQL查询中的临时表造成的。在插入之前,需要检查并删除临时表。

代码语言:javascript
运行
复制
IF OBJECT_ID('tempdb..#tempTableName') IS NOT NULL
    DROP TABLE #tempTableName;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9798022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档