SQL SERVER 2005过程分页
AspNetPager是一个比较好的分页控件,该控件使用过程分页十分方便,过程如下:
Create PROCEDURE [dbo].[pt_AspNetPager]
(
@tableName varchar(255), -- 表名
@fieldName varchar(400)= '*', -- 字段名
@strWhere varchar(255) = Null,
@fieldOrder varchar(100), --不能为空
@startIndex int,
@endIndex int
)
AS
declare @strSQL varchar(4000)
begin
set @strSQL='WITH temp AS (SELECT ROW_NUMBER() OVER (ORDER BY '+@fieldOrder+') as row,'+@fieldName+' from '+@tableName
if @strWhere<>''
SELECT @strSQL=@strSQL+' where '+@strWhere
SELECT @strSQL=@strSQL+')'
SELECT @strSQL=@strSQL+' SELECT * from temp where row between '+cast(@startIndex as varchar(10))+' and '+cast(@endIndex as varchar(10))
print @strSQL
exec (@strSQL)
END
相关文档:
1 用UNION替换OR (适用于索引列)
通常情况下, 用UNION替换WHERE子句中的OR将会起到较好的效果. 对索引列使用OR将造成全表扫描. 注意, 以上规则只针对多个索引列有效.
如果有column没有被索引, 查询效率可能会因为你没有选择OR而降低. 在下面的例子中, LOC_ID 和REGION上都建有索引.
高效: SELECT LOC_ID , LOC_DESC , ......
/*
原表:
thid other
a 1
a 1
b 0
b 0
......
count语句支持*、列名、常量、变量,并且可以用distinct关键字修饰, 并且count(列名)不会累计null的记录。下面随便用一些例子示范一下count的规则:比如对如下表做统计,所有列这里都用sql_variant类型来表示。
if (object_id ('t_test' )> 0 )
drop table t_test
go
create table t_test (a ......
表中主键必须为标识列,[ID] int IDENTITY (1,1)
1.分页方案一:(利用Not In和SELECT TOP分页)
语句形式:
SELECT TOP 页记录数量 *
from 表名
WHERE (ID NOT IN
(SELECT TOP (每页行数*(页数-1)) ID
from 表名
ORDER BY ID))
ORDER BY ID
//自己还可以加上一些查询 ......
create database test --建立test数据库
use test
create table BONUS --建立
(
ENAME NVARCHAR(10),
JOB NVARCHAR(9),
SAL FLOAT,
COMM FLOAT
)
create table DEPT --建立部门表
(
DEPTNO SMALLINT not null, --部门编号
DNAME NVARCHAR(14), --部门名
LOC NVARC ......