- 爱易网页
 
                        - 
                            MSSQL教程
 
                        - 求存储过程中游标的用法解决思路 
 
                         
                    
                    
                    日期:2014-05-18  浏览次数:20598 次 
                    
                        
                         求存储过程中游标的用法
各位,以下是我得存储过程,功能是将一张表的数据取出放在另一张临时表里,取的条件是将原表里的时间字段对应的值每隔5分钟取一条。我在我不会写的地方写上了标记。请帮帮忙 
  
 CREATE   PROCEDURE   usp_QueryRawData1 
 	   @start   varchar(50),	--开始日期    
 	   @end      varchar(50),	--结束日期 
 	   @tagIDs   varchar(3000),	--需要检索的点集合	 
                            @recordPerPage   int,	--每页的记录行数    
                            @timespan   int 
                                        --@sort   int                                          --排序方式 
 AS 
 --   指定表名、列名 
 declare   @lTable   char(50) 
 declare   @lColTag   char(50) 
 declare   @lColPrimary   char(50) 
 declare   @lColTime   char(50 
  
 set   @lTable   =    '#ttt ' 
 set   @lColTag   =    'TagId ' 
 set   @lColPrimary   =    'ID ' 
 set   @lColTime   =    '[TimeStamp] ' 
  
 --   定义局部变量,用来构造SQL语句 
 declare   @strSQL   char(8000)	--定义SQL语句,获取指定的页的纪录 
 declare   @strWhere   varchar(3900)	--定义条件语句 
  
  
 --条件语句--------------------------begin 
  
 set   @strWhere   =    ' ' 
 --   开始日期 
 if(ltrim(rtrim(@start)) <>  ' ') 
 	set   @strWhere   =    '   cast( '   +   cast(@lColTime   as   varchar(20))   +    '   as   DateTime)   > =   cast( ' ' '+cast(@start   as   varchar(20))+    ' ' '   as   DateTime)    ' 
  
 --   结束日期 
 if(ltrim(rtrim(@end)) <>  ' ') 
 	set   @strWhere   =   ltrim(@strWhere)   +    '   and   cast( ' ' '   +   cast(@end   as   varchar(20))+    ' ' 'as   DateTime)   > =      cast( '+   cast(@lColTime   as   varchar(20))   +    '   as   DateTime) ' 
  
 --排序方式 
 --if(ltrim(rtrim(   @sort))=0) 
                               --set   @sort   =   1 
 --条件语句--------------------------end 
  
 --定义临时表,保存符合检索条件的多个表的纪录----------------begin 
 create   table   #ttt 
 ( 
 ID   int, 
 TagId   int, 
 IOValue   varchar(32), 
 [TimeStamp]   datetime, 
 Quality      smallint, 
 SamplingMode   tinyint 
 ) 
 从这里开始我不会写了 
 declare   @Tempstart   datetime 
 declare   @Tempend   datetime 
 declare	u_cursor   CURSOR    
  
  
 --set   @Tempstart=@start 
  
  
 open      u_cursor 
 fetch   next   from   u_cursor   into 
  
 while   (@@fetch_status    <>    -1) 
 begin 
 	if   (@@fetch_status    <>    -2) 
 	begin	 
 	         insert   into   #ttt    
 	         exec   usp_QueryTempRawData   @Tempstart,@end,@tagIDs 
 	end 
 	fetch   next   from      u_cursor    
                         set   @Tempstart=dateadd(minute,@timespan,@Tempstart) 
                         set   @Tempend=dateadd(minute,1,@Tempstart)