zoukankan      html  css  js  c++  java
  • MSSQLSERVER数据库- 游标

      游标是属于级行操作,遍历一个表一行一行读,而SQL查询是基于数据集的,在数据量大的时候,使用游标会降低查询速度。这是很明显的。但是有些操作就用游标实现。所以游标又是不或缺少的。我很久都没用游标了,一时我也不记得怎么写,只记得游标操作一般三步。

      1.定义一个游标,将查询的数据放到在这游标中

      2.打开游标

      3.在WHILE里遍历游标,当状态不是0的时候表明没有记录了。

    在网上找了个很好的例子,记在这里,以便下次查阅

      

    --申明一个游标
    DECLARE MyCursor CURSOR    FOR SELECT TOP 5 FBookName,FBookCoding FROM TBookInfo
    --打开一个游标    
    OPEN MyCursor
    --循环一个游标
    DECLARE @BookName nvarchar(2000),@BookCoding nvarchar(2000)    
    FETCH NEXT FROM  MyCursor INTO @BookName,@BookCoding
        WHILE @@FETCH_STATUS =0    
        BEGIN        
            print 'name'+@BookName        
            FETCH NEXT FROM  MyCursor INTO @BookName,@BookCoding    
        END    
    --关闭游标
    CLOSE MyCursor
    --释放资源
    DEALLOCATE MyCursor

      我还实战了一把,将表里某些指定的数据更新,需要用到SQL语句的判断表是否存这句:

      if exists (select * from sys_boardRight where Account=@Account
         print 'yes';
       else
         print 'no';

    --申明一个游标
    DECLARE MyCursor CURSOR FOR SELECT Account from rtx where department like '%集团春天\%'
    --打开一个游标    
    OPEN MyCursor
    --循环一个游标
    DECLARE @Account nvarchar(50) --    
    
    FETCH NEXT FROM  MyCursor INTO @Account
    WHILE @@FETCH_STATUS =0    
    BEGIN
    
        if exists (select * from sys_boardRight where Account=@Account) 
            print 'no'
        else
            Insert into sys_boardRight(Account,Rights) values(@Account,2)
        FETCH NEXT FROM  MyCursor INTO @Account
    END    
    --关闭游标
    CLOSE MyCursor
    --释放资源
    DEALLOCATE MyCursor
  • 相关阅读:
    P1019 单词接龙
    最小生成树模板题POJ
    区间DP
    牛客多校第三场-A-PACM Team-多维背包的01变种
    洛谷P1004 方格取数-四维DP
    牛客多校第二场A run(基础DP)
    P1494 [国家集训队]小Z的袜子(莫队)
    洛谷:过河卒
    Codeforces Round #486 (Div. 3)-B. Substrings Sort
    判断的值是否为空
  • 原文地址:https://www.cnblogs.com/cxeye/p/3684585.html
Copyright © 2011-2022 走看看