如题!最好把代码复制下,我好放入我的网摘,谢谢!
解决方案 »
- JQUERY 删除行
- 求个问题 Linq to EF
- datalist的显示
- 如何索引层???
- 断点跟踪时,跟踪到了临时文件夹?如何跟踪他的源代码啊?有图谁能帮我解决多给100分!
- 传道授业篇:网站全局观BasePage,ascx,master page,web config...(欢迎大家畅所欲言)[应用经验][经典案例分析]
- 找不到类型或命名空间名称“SQLHelper”(是否缺少 using 指令或程序集引用?)
- 在某一个验证错误的时候,我想把页面中所有的控件的Enabled属性都设为Disable.如何办?
- |zyciis| 500分求 如何来实现像百度的快照功能。。 项目要求用户在下单的时候对用户所下的单的订单页面保存成图片 如何办到
- 谁有用asp.net做的数据库程序的列子,网页型的?帮忙贴一个!
- 我怎么会一次添加两条记录,是哪里写错了?在线等,急啊!!!!!
- 提交过程按钮禁止操作
http://www.webdiyer.com/AspNetPager/default.aspx
CREATE PROCEDURE pagination3@tblName varchar(255), -- 表名@strGetFields varchar(1000) = '*', -- 需要返回的列 @fldName varchar(255)='', -- 排序的字段名@PageSize int = 10, -- 页尺寸@PageIndex int = 1, -- 页码@doCount bit = 0, -- 返回记录总数, 非 0 值则返回@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)ASdeclare @strSQL varchar(5000) -- 主语句declare @strTmp varchar(110) -- 临时变量declare @strOrder varchar(400) -- 排序类型 if @doCount != 0 begin if @strWhere !='' set @strSQL = 'select count(*) as Total from [' + @tblName + '] where '+@strWhere else set @strSQL = 'select count(*) as Total from ' + @tblName + ']'end --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况elsebegin if @OrderType != 0begin set @strTmp = '<(select min'set @strOrder = ' order by [' + @fldName +'] desc'--如果@OrderType不是0,就执行降序,这句很重要!endelsebegin set @strTmp = '>(select max' set @strOrder = ' order by [' + @fldName +'] asc'end if @PageIndex = 1begin if @strWhere != '' set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder else set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName + '] '+ @strOrder--如果是第一页就执行以上代码,这样会加快执行速度endelsebegin--以下代码赋予了@strSQL以真正执行的SQL代码set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrder if @strWhere != '' set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + '] where [' + @fldName + ']' + @strTmp + '([' + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrderend end exec (@strSQL)GO这个希望对你有帮助
GO
SET ANSI_NULLS ON
GO
ALTER PROCEDURE usp_PagingLarge
@TableNames VARCHAR(200), --表名,可以是多个表,但不能用别名
@PrimaryKey VARCHAR(100), --主键,可以为空,但@Order为空时该值不能为空
@Fields VARCHAR(200), --要取出的字段,可以是多个表的字段,可以为空,为空表示select *
@PageSize INT, --每页记录数
@CurrentPage INT, --当前页,0表示第1页
@Filter VARCHAR(200) = '', --条件,可以为空,不用填 where
@Group VARCHAR(200) = '', --分组依据,可以为空,不用填 group by
@Order VARCHAR(200) = '' --排序,可以为空,为空默认按主键升序排列,不用填 order by
AS
BEGIN
---------------------------临时变量 start -------------------------------------------------
DECLARE @SortColumn VARCHAR(200)--排序字段
DECLARE @Operator CHAR(2)--操作符(>=或<=)
DECLARE @SortTable VARCHAR(200)--排序表
DECLARE @SortName VARCHAR(200)
---------------------------临时变量 end ---------------------------------------------------------------------------一般条件判断 start --------------------------------------
IF @CurrentPage<0--如果当前页小于0则显示第一页
SET @CurrentPage=0
IF @Fields = '' or @Fields is null --如果输出字段为空或null则输出全部字段
SET @Fields = '*'
IF @Filter = ''
SET @Filter = 'WHERE 1=1'
ELSE
SET @Filter = 'WHERE ' + @Filter
IF @Group <>''
SET @Group = 'GROUP BY ' + @Group
--------------------------一般条件判断 end ------------------------------------------------------------------排序字段判断 start ----------------------------------------
IF @Order <> ''
-----------------------排序字段不等于空 start ------------------------------------
BEGIN
DECLARE @pos1 INT, @pos2 INT ----临时变量,用来记录","和"."的位置 SET @Order = REPLACE(REPLACE(@Order, ' asc', ' ASC'), ' desc', ' DESC')--把小写或大小写混合通用转换成大写
----------------------------------------------IF start -----------------------------
IF CHARINDEX(' DESC', @Order) > 0--判断是否有" DESC"
IF CHARINDEX(' ASC', @Order) > 0--判断是否有" ASC"
BEGIN
IF CHARINDEX(' DESC', @Order) < CHARINDEX(' ASC', @Order)--判断" DESC"与" ASC"位置的先后
SET @Operator = '<='
ELSE
SET @Operator = '>='
END
ELSE
SET @Operator = '<='
----------------------------------------------IF end -----------------------------
ELSE
SET @Operator = '>='
-----------------------------------------------------------------------------------
SET @SortColumn = REPLACE(REPLACE(REPLACE(@Order, ' ASC', ''), ' DESC', ''), ' ', '')--去掉所有的" ASC"或" DESC",保留排序的字段名 SET @pos1 = CHARINDEX(',', @SortColumn)--记录","位置
IF @pos1 > 0--有","表示有多个排序字段
SET @SortColumn = SUBSTRING(@SortColumn, 1, @pos1-1)--设置排序字段名,最前面一个
SET @pos2 = CHARINDEX('.', @SortColumn)--记录"."为位置
IF @pos2 > 0--有"."表示有多个排序表
BEGIN
SET @SortTable = SUBSTRING(@SortColumn, 1, @pos2-1) --设置排序表名,第一个表
IF @pos1 > 0--有","表示有多个排序字段
SET @SortName = SUBSTRING(@SortColumn, @pos2+1, @pos1-@pos2-1)--获取排序字段,第一个字段名
ELSE
SET @SortName = SUBSTRING(@SortColumn, @pos2+1, LEN(@SortColumn)-@pos2)
END
ELSE
BEGIN
SET @SortTable = @TableNames
SET @SortName = @SortColumn
END
END
-----------------------排序字段不等于空 end ------------------------------------
ELSE
BEGIN
SET @SortColumn = @PrimaryKey
SET @SortTable = @TableNames
SET @SortName = @SortColumn
SET @Order = @SortColumn
SET @Operator = '>='
END
-------------------------排序字段判断 end ---------------------------------------- DECLARE @type varchar(50)
DECLARE @prec int
SELECT @type=t.name, @prec=c.prec
FROM sysobjects o
JOIN syscolumns c on o.id=c.id
JOIN systypes t on c.xusertype=t.xusertype
WHERE o.name = @SortTable AND c.name = @SortName
IF CHARINDEX('char', @type) > 0
SET @type = @type + '(' + CAST(@prec AS varchar) + ')' DECLARE @TopRows INT
SET @TopRows = @PageSize * @CurrentPage + 1
EXEC('
DECLARE @SortColumnBegin ' + @type + '
SET ROWCOUNT ' + @TopRows + '
SELECT @SortColumnBegin=' + @SortColumn + ' FROM ' + @TableNames + ' ' + @Filter + ' ' + @Group + ' ORDER BY ' + @Order + '
SET ROWCOUNT ' + @PageSize + '
SELECT ' + @Fields + ' FROM ' + @TableNames + ' ' + @Filter + ' AND ' + @SortColumn + '' + @Operator + '@SortColumnBegin ' + @Group + ' ORDER BY ' + @Order + '
')
ENDGO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO