【问题标题】:Definition of a quirky update古怪更新的定义
【发布时间】:2020-04-04 15:22:30
【问题描述】:

基于 Itzik Ben-Gan 在ITProToday 的文章

微软的实现遵循物理数据独立性 原则,因此不保证您会得到数据 以任何特定顺序从查询返回,除非您添加 ORDER BY 外部查询中的子句。类似的违反原则是 当人们更新数据并且解决方案的正确性依赖于 以聚集索引顺序更新的数据(在 “古怪的更新”看看我的意思)。

我试图找出一个古怪的更新意味着什么,但徒劳无功。 我正在寻找一个例子来理解这个概念。

【问题讨论】:

  • 阅读这篇论文sqlservercentral.com/articles/…,作者是“quirky update”的发明者。
  • 作者声称“证明”这种未记录的方法是可靠的,并提供了几个例子,说明它碰巧按他的预期工作。

标签: sql sql-server tsql


【解决方案1】:

这是一个“古怪更新”的例子

use tempdb
go
drop table if exists t
go
create table t(id int primary key, Amount int, RunningTotal int)

insert into t(id,Amount,RunningTotal) values (1,4,0),(2,2,0),(3,6,0)

declare @t int = 0

update t set @t = RunningTotal = @t + Amount

select * from t

输出

id          Amount      RunningTotal
----------- ----------- ------------
1           4           4
2           2           6
3           6           12

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-27
    • 2011-05-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多