日期:2014-05-18  浏览次数:20414 次

求存储过程中游标的用法
各位,以下是我得存储过程,功能是将一张表的数据取出放在另一张临时表里,取的条件是将原表里的时间字段对应的值每隔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)