- 爱易网页
-
MSSQL教程
- 求存储过程中游标的用法解决思路
日期:2014-05-18 浏览次数:20465 次
求存储过程中游标的用法
各位,以下是我得存储过程,功能是将一张表的数据取出放在另一张临时表里,取的条件是将原表里的时间字段对应的值每隔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)