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 
      
     
     
  • 相关阅读:
    leetcode 309. Best Time to Buy and Sell Stock with Cooldown
    leetcode 714. Best Time to Buy and Sell Stock with Transaction Fee
    leetcode 32. Longest Valid Parentheses
    leetcode 224. Basic Calculator
    leetcode 540. Single Element in a Sorted Array
    leetcode 109. Convert Sorted List to Binary Search Tree
    leetcode 3. Longest Substring Without Repeating Characters
    leetcode 84. Largest Rectangle in Histogram
    leetcode 338. Counting Bits
    git教程之回到过去,版本对比
  • 原文地址:https://www.cnblogs.com/qanholas/p/1860633.html
Copyright © 2011-2022 走看看