zoukankan      html  css  js  c++  java
  • sqlbetween..and 与大于,相比拼 Kenny

    先说些废话,由于种种原因,导致不想写博客,可能因为工作忙的关系,以后一旦有时间,一定经常来写写,唠叨唠叨:

    言归正传,故事即将上演:

      

    DECLARE @SysNo int
    DECLARE @SumCount int
    SET @SysNo=0
    SET @SumCount=0
    WHILE (1=1)

    BEGIN
    --先取出top 1 取出一条数据
    SELECT TOP 1

    @SysNo=SysNo
    FROM #tableName# WITH(nolock) WHERE Status='A' AND (type=1 or TYPE=2)
    AND SysNo > @SysNo
    ORDER BY SysNo ASC

    --如果查不到,则退出
    IF @@ROWCOUNT = 0 -- @@ROWCOUNT = 0 @SysNo=20
    BEGIN

    BREAK
    END


    DECLARE @PositionID int
    DECLARE @Num int
    DECLARE @Where nvarchar(50)
    SET @Num=0
    SET @PositionID=70
    WHILE(1=1)
    BEGIN
    SET @Num=@Num+1
    SET @Where=N'自定义'+CONVERT(varchar(10),@Num)
    --判断是否插入过
    IF NOT exists(

    SELECT TOP 1 a FROM #table# WITH(nolock)
    WHERE Description=@Where
    )

    BEGIN
    --PRINT @Where
    INSERT INTO #table#

    (
    a
    ,b
    ,c
    ,d
    ,e
    ,f
    ,g
    ,h
    )
    VALUES
    (4,@PositionID,0,@SysNo,@Where,getdate(),'System','A')
    SET @PositionID=@PositionID+1
    SET @SumCount=@SumCount+1
    END

    --插入到20个后,停止插入进入下一个品牌
    IF(@Num=20)

    BREAK
    END

    --如果插入大于1000条,清0停顿10秒
    IF(@SumCount=1000)

    BEGIN
    SET @SumCount=0
    WAITFOR delay '0:0:10'
    END


    END

    上面这段代码功能是(改版后的),循环取出#table#中的数据,取出的sysno为后面的循环插入数据做准备。

    这里有两个循环,第一个循环由@@Rowcount跳出循环

            第二个循环由@num=20跳出

    回忆当时写此SQL代码历程:

    1.当时我在想,第一个循环想做成表变量,或者用游标实现,但我想如果用这两者,都会产生额外的开销,故我用下面这段代码

      

    SELECT TOP 1 
    @SysNo=SysNo
    FROM #tableName# WITH(nolock) WHERE Status='A' AND (type=1 or TYPE=2)
    AND SysNo not between 0 and @SysNo
    ORDER BY SysNo ASC

      一看上去,也没啥问题,后来,经过一位同事review代码,结果查出来

    用以下代码比用 between..and 要快好多倍,很感谢她。

    SELECT TOP 1 
    @SysNo=SysNo
    FROM #tableName# WITH(nolock) WHERE Status='A' AND (type=1 or TYPE=2)
    AND SysNo > @SysNo
    ORDER BY SysNo ASC

    最后经过多次修改,最后代码完整版本,在最上面。

    仅个人总结,仅供参考,如果不足之处,恳请指正。

  • 相关阅读:
    Data type
    Backup &recovery备份和还原
    spring AOP Capability and Goals
    CDI services--Scope(生命周期)&&EL.(Sp El)
    CDI services--Event(事件)
    CDI services--interceptors(拦截器)
    CDI services--Decorators(装饰器)
    javaEE Design Patter(2)设计模式
    Http协议详解
    PRESCAN_DISCTANCE_ROBOT_INOUT_TOO_BIG
  • 原文地址:https://www.cnblogs.com/chenhuzi/p/2268568.html
Copyright © 2011-2022 走看看