zoukankan      html  css  js  c++  java
  • SqlServer——神奇代码1之Update

    说明:一个带有update的循环的代码。很简单,但是在QQ群里问了,应该说是很少有人注意这个问题,也就是很少有人真的理解SQL中的Update。

    代码如下:

    if object_id('tempdb..#TB') is not null
        drop table #TB
    go
    
    --创建的是临时表
    create table #TB
    (
        ID int
    )
    --插入5条记录
    insert into #TB (ID)
    select 1
    union all
    select 2
    union all
    select 3
    union all
    select 4
    union all
    select 5
    
    --查看记录
    select * from #TB
    go
    
    --代码1
    declare @i int 
    set @i = 1
    while @i < 5
    begin
        update #TB set ID = ID,@i = @i + 1
        select @i
    end
    go
    
    --代码2
    declare @i int
    set @i = 1
    while @i < 5
    begin
        update #TB set ID = ID
        set @i = @i + 1
        select @i    
    end

    从代码看无非就是建立了一个临时表,插入5条记录,然后代码1和代码2没有太大的差别,初次看见认为2次的循环都是4次,@i的结果应该都是5,如果你这么想,劝你还是把代码执行一遍吧,自己先想想,你的认为是错的。

    正确的结果是:

    代码1的循环次数1次,@i的结果6

    代码2的循环次数4次,@i的结果5

    看到这里,在好好的回去理解下代码,尤其是理解下update,然后再看后面的解释。

    代码解释:

    两端代码的区别无非是在update这一行,代码1将2条小语句写在一行上面,而代码2分两行写了,这就是问题的所在。
    
    代码1执行分析:
    
    @i=1
    
    While@i <5)
    
    {
    
    通过循环判断
    
    执行update,因为Update是修改ID字段的记录,记录数5条,则Update这行的代码执行5次,所以@i = @i + 1也连带的执行5次,完毕后,@i=6
    
    输出@i
    
    循环判断(@i <5)false跳出
    
    }
    
    说以,代码1的循环次数为1,但是@i=6
    
     
    
    代码2执行分析:
    
    @i=1
    
    While@i <5)
    
    {
    
    通过循环判断
    
    执行update,因为Update是修改ID字段的记录,记录数5条,则Update这行的代码执行5次,但是代码2该行没有@i = @i + 1所以完毕后,@i=1
    
    @i = @i + 1@i = 2
    
    输出@i
    
    循环判断(@i <5)true,再次执行循环,知道false
    
    }
    
    说以,代码2的循环次数为4,但是@i=5
    View Code

    参考引用:对于这种情况,我只能猜测是update本身的机制。对于代码1,每一条影响记录,那么便执行一次@i = @i + 1。所以在一次循环里面就执行了5次,达到了while的阀值,跳出循环。

    参考文献:http://www.cnblogs.com/Gin-23333/p/4127453.html

  • 相关阅读:
    iOS UITextField 设置内边距
    在网页中嵌入任意字体的解决方案
    基数等比,确定进制
    改善CSS编码的5个在线幻灯片教程
    head区的代码详解
    一个简单的、循序渐进的CSS幻灯片教程
    功能强大易用的Web视频播放器——Flowplayer(使用方法及演示)
    CSS:区分IE版本的三个方法
    CSS书写标准及最佳实践
    Sliding Photograph Galleries
  • 原文地址:https://www.cnblogs.com/zi-xing/p/4201574.html
Copyright © 2011-2022 走看看