高效通用分页存储过程

 

1.大量数据的

View Code
/****** Object:  StoredProcedure [dbo].[DataPaging]    Script Date: 11/30/2012 16:27:11 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[DataPaging]
(
    @Table VARCHAR(450),             --表名,可以是多个表,但不能用别名
    @PrimaryKey VARCHAR(50),         --主键,可以为空,但@Order为空时该值不能为空
    @Fields    VARCHAR(800),         --要取出的字段,可以是多个表的字段,可以为空,为空表示select *
    @Pagesize INT,
    @Pageindex INT,
    @Where VARCHAR(800) = '',        --条件,可以为空,不用填 where
    @Order VARCHAR(200) = '',        --排序,可以为空,为空默认按主键升序排列,不用填 order by
    @RecordCount  int
)
as
set nocount on
DECLARE @ListCount INT
DECLARE @pos INT
IF @Fields = ''
    SET @Fields = '*'
IF @Where <> ''
    SET @Where = 'WHERE ' +  @Where
IF @Order = '' OR @Order = null
    SET @Order = @PrimaryKey + ' DESC'

SET @Order = REPLACE(REPLACE(@Order, 'asc', 'ASC'), 'desc', 'DESC')   
/*第一页*/
if(@Pageindex=1)
    exec('select  top '+@Pagesize+@Fields +' from ' + @Table+' '+@Where+' order by ' + @Order)
else
begin
    declare @PageUpperBound int
    declare @endrecords int
    DECLARE @TempOrderA VARCHAR(200), @TempOrderB VARCHAR(200)
    DECLARE @SortName VARCHAR(100),@SortTable VARCHAR(100),@SortNameTmp VARCHAR(100)
    DECLARE @TableNameA  VARCHAR(100),@TableNameB  VARCHAR(100)
    
    set @PageUpperBound=@Pageindex*@Pagesize
    /*转换排序开始*/
        IF CHARINDEX(',', @Order) > 0
            begin
                set @pos = 0
                SET @TempOrderA = @Order
                WHILE (CHARINDEX(',', @Order,@pos)>0)
               BEGIN
                    SET @SortName = SUBSTRING(@Order, @pos, (CHARINDEX(',', @Order,@pos)-@pos))
                    SET @SortTable = SUBSTRING(@SortName, 0, CHARINDEX('.', @SortName))
                    SET @SortNameTmp = REPLACE(@SortName,  @SortTable, 'A')

                    IF CHARINDEX('DESC',@SortNameTmp) > 0
                        BEGIN
                            SET @SortNameTmp = REPLACE(@SortNameTmp, 'DESC','ASC')
                        END
                    ELSE IF CHARINDEX('ASC',@SortNameTmp) > 0
                        BEGIN
                            SET @SortNameTmp = REPLACE(@SortNameTmp, 'ASC','DESC')
                        END
                    ELSE
                        BEGIN
                            SET @SortNameTmp = @SortNameTmp + ' DESC'
                        END

                    SET @TempOrderA = REPLACE(@TempOrderA,  @SortName, @SortNameTmp)
                    SET @TempOrderB = REPLACE(@Order,  @SortTable, 'B')
                    SET @pos = CHARINDEX(',', @Order,@pos) + 1
                END
                
                SET @SortName = SUBSTRING(@Order, @pos, (LEN(@Order)-@pos+1))
                SET @SortTable = SUBSTRING(@SortName, 0, CHARINDEX('.', @SortName))
                SET @SortNameTmp = REPLACE(@SortName,  @SortTable, 'A')
                IF CHARINDEX('DESC',@SortNameTmp) > 0
                    BEGIN
                        SET @SortNameTmp = REPLACE(@SortNameTmp, 'DESC','ASC')
                    END
                ELSE IF CHARINDEX('ASC',@SortName) > 0
                    BEGIN
                        SET @SortNameTmp = REPLACE(@SortNameTmp, 'ASC','DESC')
                    END
                ELSE
                    BEGIN
                        SET @SortNameTmp = @SortNameTmp + ' DESC'
                    END
                SET @TempOrderA = REPLACE(@TempOrderA,  @SortName, @SortNameTmp)
                SET @TempOrderB = REPLACE(@TempOrderB,  @SortTable, 'B')
            end
      else
            begin
            SET @SortTable = SUBSTRING(@Order, 0, CHARINDEX('.', @Order))
            SET @TempOrderA = REPLACE(@Order,  @SortTable, 'A')
            SET @TempOrderB = REPLACE(@Order,  @SortTable, 'B')
            IF CHARINDEX('DESC',@TempOrderA) > 0
            BEGIN
                SET @TempOrderA = REPLACE(@TempOrderA, 'DESC','ASC')
            END
            ELSE IF CHARINDEX('ASC',@TempOrderA) > 0
            BEGIN
                SET @TempOrderA = REPLACE(@TempOrderA, 'ASC','DESC')
            END
            ELSE
            BEGIN
                SET @TempOrderA = @TempOrderA + ' DESC'
            END
        end
    /*转换排序结束*/

    if(@RecordCount-(@PageUpperBound-@Pagesize)<=@Pagesize)
        begin
            set @endrecords=@RecordCount-(@PageUpperBound-@Pagesize)
            IF CHARINDEX(',', @Order) > 0
                BEGIN
                    DECLARE @TMP1 VARCHAR(50),@TMP2 VARCHAR(50)
                    set @pos = 0
                    WHILE (CHARINDEX(',', @Order,@pos)>0)      --CHARINDEX(',', @Order,@pos)>0
                    BEGIN
                        SET @TMP1 = SUBSTRING(@Order, @pos, CHARINDEX(',', @Order,@pos))
                        if  CHARINDEX('ASC', @TMP1) > 0
                        begin
                            SET @TMP2 = REPLACE(@TMP1, 'ASC','DESC')
                        end
                        else if CHARINDEX('DESC', @TMP1) > 0
                        begin
                            SET @TMP2 = REPLACE(@TMP1, 'DESC','ASC')
                        end
                        else
                        begin
                            SET @TMP2 = @TMP1 + ' DESC'
                        end
                        SET @Order =  REPLACE(@Order,  @TMP1, @TMP2)
                        SET @pos = CHARINDEX(',', @Order,@pos) + 1
                    END

                    SET @TMP1 = SUBSTRING(@Order, @pos, (LEN(@Order)-@pos+1))
                    if  CHARINDEX('ASC', @TMP1) > 0
                        begin
                            SET @TMP2 = REPLACE(@TMP1, 'ASC','DESC')
                        end
                    else if CHARINDEX('DESC', @TMP1) > 0
                        begin
                            SET @TMP2 = REPLACE(@TMP1, 'DESC','ASC')
                        end
                    else
                        begin
                            SET @TMP2 = @TMP1 + ' DESC'
                        end
                    SET @Order = REPLACE(@Order,  @TMP1, @TMP2)
                END
            ELSE
                BEGIN
                    if  CHARINDEX('ASC', @Order) > 0
                        begin
                            SET @Order = REPLACE(@Order, 'ASC','DESC')
                        end
                    else if CHARINDEX('DESC', @Order) > 0
                        begin
                            SET @Order = REPLACE(@Order, 'DESC','ASC')
                        end
                    else
                        begin
                            SET @Order = @Order + ' DESC'
                        end
                END
            exec('select * from ( select  top '+@endrecords+@Fields+'  from ' + @Table+'  '+@Where+' order by ' + @Order + ')B order by ' + @TempOrderB)
        end
    else
        Begin
            exec('select * from (select top '+@Pagesize+' * from (select  top '+@PageUpperBound
            +@Fields+'  from ' + @Table
            +' '+@Where+' order by '+@Order+')A order by '+@TempOrderA+')B order by '+ @TempOrderB )
        End
end
set nocount off

 

2.少量数据的

View Code
/****** Object:  StoredProcedure [dbo].[DoSplitPage]    Script Date: 11/30/2012 16:44:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[DoSplitPage]
@Sql nvarchar(4000), --要执行的sql语句
@PageNumber int=1,   --起始页码
@PageSize int,  --每页记录数
@RecordCount int output --总记录数
as
/*
declare @i int
exec DoSplitPage 'select * from Map_ElementHot',10,20,@i output
print @i
*/
set nocount on
declare @p1 int  --游标的id
declare @count int
exec sp_cursoropen @p1 output,@sql,@scrollopt=1,@ccopt=1,@rowcount=@count output
set @RecordCount = @count
set @PageNumber=(@PageNumber-1)*@pagesize+1
exec sp_cursorfetch @p1,16,@PageNumber,@PageSize 
exec sp_cursorclose @p1
set nocount off

 

转载于:https://www.cnblogs.com/everyone/archive/2012/11/30/2796496.html

一、数据采集层:多源人脸数据获取 该层负责从不同设备 / 渠道采集人脸原始数据,为后续模型训练与识别提供基础样本,核心功能包括: 1. 多设备适配采集 实时摄像头采集: 调用计算机内置摄像头(或外接 USB 摄像头),通过OpenCV的VideoCapture接口实时捕获视频流,支持手动触发 “拍照”(按指定快捷键如Space)或自动定时采集(如每 2 秒采集 1 张),采集时自动框选人脸区域(通过Haar级联分类器初步定位),确保样本聚焦人脸。 支持采集参数配置:可设置采集分辨率(如 640×480、1280×720)、图像格式(JPG/PNG)、单用户采集数量(如默认采集 20 张,确保样本多样性),采集过程中实时显示 “已采集数量 / 目标数量”,避免样本不足。 本地图像 / 视频导入: 支持批量导入本地人脸图像文件(支持 JPG、PNG、BMP 格式),自动过滤非图像文件;导入视频文件(MP4、AVI 格式)时,可按 “固定帧间隔”(如每 10 帧提取 1 张图像)或 “手动选择帧” 提取人脸样本,适用于无实时摄像头场景。 数据集对接: 支持接入公开人脸数据集(如 LFW、ORL),通过预设脚本自动读取数据集目录结构(按 “用户 ID - 样本图像” 分类),快速构建训练样本库,无需手动采集,降低系统开发与测试成本。 2. 采集过程辅助功能 人脸有效性校验:采集时通过OpenCV的Haar级联分类器(或MTCNN轻量级模型)实时检测图像中是否包含人脸,若未检测到人脸(如遮挡、侧脸角度过大),则弹窗提示 “未识别到人脸,请调整姿态”,避免无效样本存入。 样本标签管理:采集时需为每个样本绑定 “用户标签”(如姓名、ID 号),支持手动输入标签或从 Excel 名单批量导入标签(按 “标签 - 采集数量” 对应),采集完成后自动按 “标签 - 序号” 命名文件(如 “张三
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值