SQL游标嵌套例子+游标嵌套存储过程

游标嵌套,主要用于复杂计算,数据分析和处理。

不过要消耗系统性能。可以做一个jobs 在晚上夜里运行。

SQL

文库:http://wenku.baidu.com/view/28e3414de518964bcf847c04.html

里面有用到游标变量:

set @cmd = 'declare cursor_tmp_2 cursor for select val from tmp1 where id in (' + @vals + ')'

 EXEC (@cmd)

open cursor_tmp_2

在游标中更新数据:

set @command = 'update tmp2 set vals =''' + @vals3 + ''' where id =' + convert(char, @id)

print @command

EXEC (@command)

---------------------------------------------------------------------------------------

嵌套例子:

SET NOCOUNT ON  
DECLARE @au_id varchar(11),@au_fname varchar(20),@au_lname varchar(40),@message varchar(80), @title varchar(80)  
PRINT "--------Authors report --------"  

DECLARE authors_cursor CURSOR FOR  SELECT au_id, au_fname, au_lname FROM authors 
WHERE state = "UT" ORDER BY au_id  

OPEN authors_cursor  

FETCH NEXT FROM authors_cursor  INTO @au_id, @au_fname, @au_lname  

WHILE @@FETCH_STATUS = 0 
BEGIN 
   PRINT " " 
   SELECT @message = "----- Books by Author: " + @au_fname + " " + @au_lname  
   PRINT @message  
   --Declare an inner cursor based on au_id from the outer cursor.

   DECLARE titles_cursor CURSOR FOR  SELECT t.title  FROM titleauthor ta, titles t 
   WHERE ta.title_id = t.title_id AND ta.au_id = @au_id
   -- Variable value from the outer cursor  
   OPEN titles_cursor

   FETCH NEXT FROM titles_cursor INTO @title  
   
   IF @@FETCH_STATUS <> 0  
      PRINT "         <<No Books>>"  --no found: -1 false ,-2 not exist
     
   WHILE @@FETCH_STATUS = 0   
     BEGIN        
      SELECT @message = "         " + @title 
      PRINT @message 
      FETCH NEXT FROM titles_cursor INTO @title 
     END  
   CLOSE titles_cursor 
   DEALLOCATE titles_cursor    
 
   -- Get the next author. 
   FETCH NEXT FROM authors_cursor INTO @au_id, @au_fname, @au_lname
END

CLOSE authors_cursor 
DEALLOCATE authors_cursor


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值