MSSQL网页设计分页存储历程,综合了NOT_IN和SET ROW...
优化的SQL查询算法,有效地提高查询速度存储历程|分页分页存储历程,本人把“NOT_IN”和“SETROWCOUNT”两种体例综合了一下。
“SETROWCOUNT”算法稳定,“NOT_IN”排序时加了主键字段,如许速率提拔了良多并且了局是单向独一的,但不是双向可逆的。“SETROWCOUNT”没有速率成绩,“NOT_IN”排序加了主键字段后在30W纪录时对非索引字段、非聚合字段的排序翻一页不外3秒钟,还能够吧:P
----------------------
CREATEPROCEDUREPaging_Custom
(
@Tablesvarchar(1000),
@PKvarchar(100),
@Sortvarchar(200)=NULL,
@isAscendingbit=1,
@PageNumberint=1,
@PageSizeint=10,
@Fieldsvarchar(1000)=*,
@Filtervarchar(1000)=NULL,
@Groupvarchar(1000)=NULL)
AS
/*DefaultSorting*/
IF@SortISNULLOR@Sort=
SET@Sort=@PK
/*Findthe@SORTtype*/
DECLARE@strFiltervarchar(1000)
DECLARE@strSimpleFiltervarchar(1000)
DECLARE@strGroupvarchar(1000)
DECLARE@SortTablevarchar(100)
DECLARE@SortNamevarchar(100)
DECLARE@strPKColumnvarchar(200)
DECLARE@strSortColumnvarchar(200)
DECLARE@operatorchar(2)
/*Setfilter&groupvariables.*/
IF@FilterISNOTNULLAND@Filter!=
BEGIN
SET@strFilter=WHERE+@Filter+
SET@strSimpleFilter=AND+@Filter+
END
ELSE
BEGIN
SET@strSimpleFilter=
SET@strFilter=
END
IF@GroupISNOTNULLAND@Group!=
SET@strGroup=GROUPBY+@Group+
ELSE
begin
SET@strGroup=
end
/*count*/
exec(selectcount(*)from+@Tables++@strFilter)
/*Setsortingvariables.*/
SET@strSortColumn=@Sort
/*operatorandasc_desc*/
declare@strAsc_Desvarchar(10)
IF@isAscending=0
BEGIN
SET@operator=<=
SET@strAsc_Des=Desc
END
ELSE
BEGIN
SET@operator=>=
SET@strAsc_Des=ASC
END
IFCHARINDEX(.,@PK)>0
BEGIN
SET@strPKColumn=SUBSTRING(@PK,0,CHARINDEX(.,@PK))
END
ELSE
BEGIN
SET@strPKColumn=@PK
END
IFCHARINDEX(.,@strSortColumn)>0
BEGIN
SET@SortTable=SUBSTRING(@strSortColumn,0,CHARINDEX(.,@strSortColumn))
SET@SortName=SUBSTRING(@strSortColumn,CHARINDEX(.,@strSortColumn)+1,LEN(@strSortColumn))
END
ELSE
BEGIN
SET@SortTable=@Tables
SET@SortName=@strSortColumn
END
/*Handlercomplextable*/
--Bejointable,sogetthelefttable
IFCHARINDEX(join,@Tables)>0
BEGIN
SET@SortTable=SUBSTRING(ltrim(@Tables),0,CHARINDEX(,@Tables))
SET@strSortColumn=@SortTable+.+@SortName
END
/*CheckthesortColumnifbeUnique*/
DECLARE@tempNamevarchar(100)
IF@SortName@strPKColumn
begin
SELECT@tempName=b.name
FROMsysobjectsaINNERJOIN
sysobjectsbONa.id=b.parent_obj
INNERJOINsysindexescONb.name=c.nameINNERJOIN
sysindexkeysdONc.id=d.idANDc.indid=d.indidINNERJOIN
syscolumnseONd.id=e.idANDd.colid=e.colid
WHERE(b.xtype=UQ)AND(a.name=@SortTable)AND(e.name=@SortName)
IF@tempNameISNULLGOTO:Paging_Not_In
end
DECLARE@typevarchar(100)
DECLARE@precint
SELECT@type=t.name,@prec=c.prec
FROMsysobjectso
JOINsyscolumnscono.id=c.id
JOINsystypestonc.xusertype=t.xusertype
WHEREo.name=@SortTableANDc.name=@SortName
/*Thelefttabledoesntcontainsortcolumn*/
--IF@typeisnullor@type=Goto:Paging_Not_In
IFCHARINDEX(char,@type)>0
SET@type=@type+(+CAST(@precASvarchar)+)
DECLARE@strPageSizevarchar(50)
DECLARE@strStartRowvarchar(50)
/*DefaultPageNumber*/
IF@PageNumber<1
SET@PageNumber=1
/*Setpagingvariables.*/
SET@strPageSize=CAST(@PageSizeASvarchar(50))
SET@strStartRow=CAST(((@PageNumber-1)*@PageSize+1)ASvarchar(50))
/*Executedynamicquery*/
EXEC(DECLARE@SortColumn+@type+
SETROWCOUNT+@strStartRow+
SELECT@SortColumn=+@strSortColumn+FROM+@Tables+@strFilter++@strGroup+
ORDERBY+@Sort+@strAsc_Des+SETROWCOUNT+@strPageSize+
SELECT+@Fields+FROM+@Tables+WHERE+@strSortColumn+@operator+@SortColumn+
@strSimpleFilter++@strGroup+ORDERBY+@Sort+@strAsc_Des
)
return
Paging_Not_In:
--DECLARE@strPageSizevarchar(50)
--SET@strPageSize=CAST(@PageSizeASvarchar(50))
declare@strTotalNumint
SET@strTotalNum=(@PageNumber-1)*@PageSize
--第一页
--Declare@strSQLvarchar(8000)
IF@strTotalNum=0
begin
exec(selecttop+@PageSize++@Fields+from+@Tables++@strFilter+@strGroup+ORDERBY+@Sort+@strAsc_Des)
end
else
begin
exec(selecttop+@PageSize++@Fields+from+@Tables+where
+@PK+notin(selecttop
+@strTotalNum++@PK+from+@Tables++@strFilter+@strGroup+
ORDERBY+@Sort+@strAsc_Des
+)+@strSimpleFilter+@strGroup+ORDERBY+@Sort+@strAsc_Des)
end
GO
2008年1月16号MySQLAB被Sun公司收购。而2009年,SUN又被Oracle收购。就这样如同一个轮回,MySQL成为了Oracle公司的另一个数据库项目。 呵呵,这就是偶想说的 无法深入到数据库系统层面去了解和探究 我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力 比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。 索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。 XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!) SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。 学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了! 从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。
页:
[1]