首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求存储过程中游标的用法解决思路

2012-03-23 
求存储过程中游标的用法各位,以下是我得存储过程,功能是将一张表的数据取出放在另一张临时表里,取的条件是

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

END

到这里结束

--定义临时表,保存符合检索条件的多个表的纪录----------------end


--   SQL

--   判断条件是否为空
if(ltrim(rtrim(@strWhere)) <> ' ')
set   @strSQL   =   'select   case   when   (count(*) < '+cast(@recordPerPage   as   varchar(50))+ ') '  
+   '   and   (count(*)!=0) '  
+   '   then   ' '1 ' '   else   CEILING(cast(count(*)   as   decimal)/ '+cast(@recordPerPage   as   varchar(50))+ ')   end   '  
+   '   as   count   from   '+   cast(@lTable   as   varchar(20))   + '   where   '   +   ltrim(rtrim(cast(@strWhere   as   varchar(3900))))
else
set   @strSQL   =   'select   case   when   (count(*) < '+cast(@recordPerPage   as   varchar(50))+ ') '  
+   '   and   (count(*)!=0) '  
+   '   then   ' '1 ' '   else   CEILING(cast(count(*)   as   decimal)/ '+cast(@recordPerPage   as   varchar(50))+ ')   end   '  
+   '   as   count   from   '+   cast(@lTable   as   varchar(20))
--   执行SQL语句,返回结果集
exec(@strSQL)
GO

[解决办法]
select * from [table] where datediff(minute,@start,[TimeStamp]) % 5=0 and [TimeStamp] between @start and @end

热点排行