zoukankan      html  css  js  c++  java
  • 一个update的小故事

    偶尔测试了一段小代码,写个循环

    if object_id('tempdb..#TB') is not null
        drop table #TB
    go
    
    create table #TB
    (
        ID int
    )
    
    insert into #TB (ID)
    select 1
    union all
    select 2
    union all
    select 3
    union all
    select 4
    union all
    select 5
    
    --代码1
    declare @i int 
    set @i = 1
    while @i < 5
    begin
        update #TB set ID = ID,@i = @i + 1
        select @i
    end
    --代码2
    set @i = 1 while @i < 5 begin update #TB set ID = ID
       set @i = @i + 1 select @i end



    本来我觉得2段代码是一致的。都是执行了5次,那么@i = 6

    但实际上,代码2是符合上述情况,执行了5次,@i = 6

    但代码1 却只是执行了1次,@i = 6

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

    而对于代码2,则没有这个限制,顺序执行。

    当然这只是个人猜想,还请各位指导。

    这么一个简单的语句,一个不留神都踩坑,看来Sql Server里面的故事真不少啊

  • 相关阅读:
    小程序运行环境
    在虚拟机系统上安装oracle教程
    Java keywords
    Java bytecode instruction listings
    一个理解JVM的例子2
    一个理解JVM的例子
    JDK的环境变量设置
    JRE、JDK和JVM的关系
    合理的封装实例
    修改源码的几种取巧的方式
  • 原文地址:https://www.cnblogs.com/Gin-23333/p/4127453.html
Copyright © 2011-2022 走看看