求对于大量数据的操作方法
发货单总表入库编号 发货单号码 状态 入库时间
1 150001 已用 2005-06-12
1 ... 已用 2005-06-12
1 160000 已用 2005-06-12
2 180000 未用 2005-06-12
2 ... 未用 2005-06-12
2 210000 未用 2005-06-12
2 215000 未用 2005-06-12
2 ... 未用 2005-06-12
2 220000 未用 2005-06-12
2 225000 未用 2005-06-12
2 ... 未用 2005-06-12
2 275000 未用 2005-06-12
3 280000 已用 2005-06-12
3 ... 已用 2005-06-12
3 295000 已用 2005-06-12根据上表的结构和数据,发票号码本应该是连续的,但因为各部门领取和退回总仓库的原因,造成不连续,
问题一:如果用户要录入167500---175000的入库单号码(只需在2个编辑框中输入167500-175000,系统将自动产生相应的入库单信息) 程序上怎样控制避免重复,并且进行相应的提示编号为XXXXXX的入库单已经存在了,问题二:对于不连续的现有数据,怎样能高速对连续的数据进行分组显示,得到下面的报表,
序号 入库编号 起始单号 终止单号 单据数量 单据状态 入库日期
1 1 150001 160000 10000 已用 2005-06-12
2 2 180000 210000 30000 未用 2005-06-12
3 2 215000 220000 5000 未用 2005-06-12
4 2 225000 275000 50000 未用 2005-06-12
4 3 280000 295000 15000 已用 2005-06-12
发货单总表入库编号 发货单号码 状态 入库时间
1 150001 已用 2005-06-12
1 ... 已用 2005-06-12
1 160000 已用 2005-06-12
2 180000 未用 2005-06-12
2 ... 未用 2005-06-12
2 210000 未用 2005-06-12
2 215000 未用 2005-06-12
2 ... 未用 2005-06-12
2 220000 未用 2005-06-12
2 225000 未用 2005-06-12
2 ... 未用 2005-06-12
2 275000 未用 2005-06-12
3 280000 已用 2005-06-12
3 ... 已用 2005-06-12
3 295000 已用 2005-06-12根据上表的结构和数据,发票号码本应该是连续的,但因为各部门领取和退回总仓库的原因,造成不连续,
问题一:如果用户要录入167500---175000的入库单号码(只需在2个编辑框中输入167500-175000,系统将自动产生相应的入库单信息) 程序上怎样控制避免重复,并且进行相应的提示编号为XXXXXX的入库单已经存在了,问题二:对于不连续的现有数据,怎样能高速对连续的数据进行分组显示,得到下面的报表,
序号 入库编号 起始单号 终止单号 单据数量 单据状态 入库日期
1 1 150001 160000 10000 已用 2005-06-12
2 2 180000 210000 30000 未用 2005-06-12
3 2 215000 220000 5000 未用 2005-06-12
4 2 225000 275000 50000 未用 2005-06-12
4 3 280000 295000 15000 已用 2005-06-12
插入不会引起太大的速度问题,关键还是查询.
第一问也是要查询后再添加!查询的时候最好用存储过程,csdn帖子很多。给你一个分页存储过程,我经常用的,效果不错,不是我写的。CREATE PROCEDURE sp_page
@tb varchar(50), --表名
@col varchar(50), --按该列来进行分页
@coltype int, --@col列的类型,0-数字类型,1-字符类型,2-日期时间类型
@orderby bit, --排序,0-顺序,1-倒序
@collist varchar(800),--要查询出的字段列表,*表示全部字段
@pagesize int, --每页记录数
@page int, --指定页
@condition varchar(800),--查询条件
@pages int OUTPUT --总页数
AS
/*
功能描述:对指定表中满足条件的记录按指定列进行分页查询,分页可以顺序、倒序
查询可以指定页大小、指定查询任意页、指定输出字段列表,返回总页数
作 者:pbsql
版 本:1.10
最后修改:2004-11-29
*/
DECLARE @sql nvarchar(4000),@where1 varchar(800),@where2 varchar(800)
IF @condition is null or rtrim(@condition)=''
BEGIN--没有查询条件
SET @where1=' WHERE '
SET @where2=' '
END
ELSE
BEGIN--有查询条件
SET @where1=' WHERE ('+@condition+') AND '--本来有条件再加上此条件
SET @where2=' WHERE ('+@condition+') '--原本没有条件而加上此条件
END
SET @sql='SELECT @pages=CEILING((COUNT(*)+0.0)/'+CAST(@pagesize AS varchar)+
') FROM '+@tb+@where2
EXEC sp_executesql @sql,N'@pages int OUTPUT',@pages OUTPUT--计算总页数
IF @orderby=0
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+
' FROM '+@tb+@where1+@col+'>(SELECT MAX('+@col+') '+
' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+
@col+' FROM '+@tb+@where2+'ORDER BY '+@col+') t) ORDER BY '+@col
ELSE
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+
' FROM '+@tb+@where1+@col+'<(SELECT MIN('+@col+') '+
' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+
@col+' FROM '+@tb+@where2+'ORDER BY '+@col+' DESC) t) ORDER BY '+
@col+' DESC'
IF @page=1--第一页
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+' FROM '+@tb+
@where2+'ORDER BY '+@col+CASE @orderby WHEN 0 THEN '' ELSE ' DESC' END
EXEC(@sql)
GO