• SQL 循环语句几种写法


     

    1、正常循环语句

    declare @orderNum varchar(255)
    create table #ttableName(id int identity(1,1),Orders varchar(255))
    declare @n int,@rows int
    insert #ttableName(orders) select orderNum from pe_Orders where orderId<50
    --select @rows=count(1) from pe_Orders
    select @rows =@@rowcount 
    set @n=1 
    while @n<=@rows
    begin
    select @orderNum=OrderNum from PE_Orders where OrderNum=(select Orders from #ttableName where id=@n)
    print (@OrderNum)
    select @n=@n+1
    end
    drop table #ttableName

    2、不带事务的游标循环

    declare @orderN varchar(50)  --临时变量,用来保存游标值
    declare y_curr cursor for   --申明游标 为orderNum
    select orderNum from pe_Orders where orderId<50
    open y_curr   --打开游标
    fetch next from Y_curr into @orderN   ----开始循环游标变量
    while(@@fetch_status=0)  ---返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。
    begin
    print (@orderN)
    update pe_Orders set Functionary+@orderN where orderNum=@orderN   --操作数据库
    fetch next from y_curr into @orderN   --开始循环游标变量
    end
    close y_curr  --关闭游标
    deallocate y_curr   --释放游标

    3、带事务的游标循环

    select orderNum,userName,MoneyTotal into #t from pe_Orders po
    DECLARE @n int,@error int
    --set @n=1
    set @error=0
    BEGIN TRAN   --申明 开始事务
    declare @orderN varchar(50),@userN varchar(50)   --临时变量,用来保存游标值
    declare y_curr cursor for    --申明游标 为orderNum,userName
    select orderNum,userName from PE_Orders where Orderid<50
    open y_curr
    fetch next from y_curr into @orderN,@userN
    while @@fetch_status = 0
    BEGIN
    select isnull(sum(MoneyTotal),0),orderNum from #t where username=@userN
    -- set @n=@n+1
    set @error=@error+@@error  --记录每次运行sql后 是否正确 0正确
    fetch next from y_curr into @orderN,@userN
    END
    IF @error=0
    BEGIN
    commit tran   ---事务提交
    END
    ELSE
    BEGIN
    ROLLBACK TRAN   ---事务回滚
    END
    close y_curr
    deallocate y_curr
    DROP TABLE #t

    4、if语句使用示例

    declare @a int
    set @a=12
    if @a>100
    begin
    print @a
    end
    else
    begin
    print 'no'
    end

    5、while语句使用示例

    declare @i int
    set @i=1
    while @i<30
    begin
    insert into test (userid) values(@i)
    set @i=@i+1
    end
    -- 设置重复执行 SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。 本条为以前从网上查找获取!


    6、临时表和try

     -- 增加临时表
    select * into #csj_temp from csj
    -- 删除临时表 用到try
    begin try -- 检测代码开始
    drop table #csj_temp
    end try
    begin catch -- 错误开始
    end catch


    7、游标循环读记录

    declare @temp_temp int
    --declare @Cur_Name
    --@Cur_Name="aaa"
    --------------------------------- 创建游标 --Local(本地游标)
    DECLARE aaa CURSOR for select House_Id from House_House where Deleted=0 or deleted is null
    ----------------------------------- 打开游标
    Open aaa
    ----------------------------------- 遍历和获取游标
    fetch next from aaa into @temp_temp
    --print @temp_temp
    while @@fetch_status=0
    begin
    --做你要做的事
    select * from House_monthEnd where House_Id=@temp_temp
    fetch next from aaa into @temp_temp -- 取值赋给变量
    --
    end
    ----------------------------------- 关闭游标
    Close aaa
    ----------------------------------- 删除游标
    Deallocate aaa

  • 相关阅读:
    matplotlib 柱状图
    JavaScript 箭头函数
    JavaScript map reduce
    JavaScript sort函数
    JavaScript var、let、const
    javaScript 迭代器
    javaScript map和set
    批处理学习(-)之文件夹和文件的移动
    让 Lua 访问数据库
    lua 模块化推荐方法
  • 原文地址:https://www.cnblogs.com/wwwlzp/p/13446067.html
Copyright © 2020-2023  润新知