zoukankan      html  css  js  c++  java
  • 游标ISO Syntax

     
     
    --1.FOR UPDATE ,更新不允许的列,出错,游标有 FOR UPDATE 列表,但请求更新的列不在此列表中 
    DECLARE mycursor   CURSOR FOR SELECT * FROM aa1 FOR UPDATE OF 生成工号  
    --DECLARE mycursor   CURSOR FOR SELECT * FROM aa1 FOR UPDATE   
     
    OPEN mycursor 
    FETCH NEXT FROM mycursor 
    UPDATE  aa1 
    SET     户名 = '周杰伦2
    WHERE CURRENT OF mycursor ; 
      
    CLOSE  mycursor 
    DEALLOCATE mycursor 
     
    --2.for read ONLY,游标是只读的。不可更新 
    DECLARE mycursor   CURSOR FOR SELECT 费用ID,户名 FROM aa1 FOR READ ONLY 
     
    OPEN mycursor 
    FETCH NEXT FROM mycursor 
    UPDATE  aa1 
    SET     户名 = '周杰伦2
    WHERE CURRENT OF mycursor ; 
     
    CLOSE  mycursor 
    DEALLOCATE mycursor 
     
    --3.LAST,PRIOR,ABSOLUTE,RELATIVE,指定SCROLL 全部可用,不指定只能用next,出错如fetch: 提取类型 prior 不能与只进游标一起使用。 
      
    DECLARE vend_cursor SCROLL CURSOR  FOR SELECT * FROM aa1 
     --DECLARE vend_cursor CURSOR FOR SELECT * FROM aa1 
    OPEN vend_cursor 
     
    FETCH LAST FROM vend_cursor 
    FETCH PRIOR FROM vend_cursor 
    FETCH ABSOLUTE 45  FROM vend_cursor 
    FETCH RELATIVE 2 FROM vend_cursor 
     
     
    CLOSE vend_cursor 
    DEALLOCATE vend_cursor 
     
    --4.INSENSITIVE关键字 
    /* 
    表明MS SQL SERVER 会将游标定义所选取出来的数据记录存放在一临时表内(建立在tempdb 数据库下)。 
    对该游标的读取操作皆由临时表来应答。因此,对基本表的修改并不影响游标提取的数据, 
    即游标不会随着基本表内容的改变而改变,同时也无法通过游标来更新基本表。 
    如果不使用该保留字,那么对基本表的更新、删除都会反映到游标中。 
    */ 
    --a. 
    DECLARE mycursor INSENSITIVE   CURSOR FOR SELECT 户号,户名 FROM aa1  
     
    OPEN mycursor 
    FETCH NEXT FROM mycursor 
      
    /* 
    UPDATE  aa1 SET 户名='刘德华' WHERE  户号=30  
    */ 
     
    CLOSE  mycursor 
    DEALLOCATE mycursor 
     
     
    --fetch next的数据,open mycursor之后,update执行一次,到第五条数据,数据未改变 
    /* 
    户号    户名 
    30        周杰伦111 
    */ 
    ----------------------------------------------------------------- 
    --b. 
    DECLARE mycursor    CURSOR FOR SELECT 户号,户名 FROM aa1  
     
    OPEN mycursor 
    FETCH NEXT FROM mycursor 
      
    /* 
    UPDATE  aa1 SET 户名='周杰伦12' WHERE  户号=30 
    */ 
     
    CLOSE  mycursor 
    DEALLOCATE mycursor 
     
    --fetch next的数据,open mycursor之后,update执行一次,到第五条数据,发生改变 
    /* 
    户号    户名 
    30    周杰伦12 
    */ 
     
     
     
     
    --5.带变量 
    DECLARE mycursor CURSOR FOR SELECT 费用ID,户名 FROM aa1 
    OPEN mycursor 
     
    DECLARE @费用ID INT 
    DECLARE @户名 VARCHAR(60
     
    WHILE @@fetch_status = 0  
        BEGIN 
            FETCH NEXT FROM mycursor  INTO @费用ID,@户名 
        
         
            SELECT  CAST(@费用ID AS VARCHAR(60)) + ' ' + @户名 
        END 
     
    CLOSE mycursor 
     
    DEALLOCATE mycursor 
      
     
     
  • 相关阅读:
    day 30 粘包 自定义报头
    day29 网络基础之网络协议和通信
    day28 面向对象的进阶 反射 和类的内置方法
    day 27 模块和包 面向对象的复习
    CGI,FastCGI,PHP-CGI和PHP-FPM的区别
    跨平台的移动应用开发引擎CrossApp简介
    element-ui组件中的select等的change事件中传递自定义参数
    关于setInterval和setTImeout中的this指向问题
    懒加载和预加载的区别
    vueX的五个核心属性
  • 原文地址:https://www.cnblogs.com/qanholas/p/1860633.html
Copyright © 2011-2022 走看看