| 最近发现现有框架的通用查询存储过程的性能慢,于是仔细研究了下代码: Alter PROCEDURE [dbo].[AreaSelect]@PageSize int=0,
 @CurrentPage int=1,
 @Identifier int=NULL,
 @ParentId int=NULL,
 @AreaLevel int=NULL,
 @Children int=NULL,
 @AreaName nvarchar(50)=NULL,
 @Path nvarchar(MAX)=NULL,
 @Status int=NULL,
 @Alt int=NULL
 AS
 BEGIN
 SET NOCOUNT ON;
 IF (NOT @AreaName IS NULL)    SET @AreaName='%'+@AreaName+'%'
 IF (NOT @Path IS NULL)    SET @Path='%'+@Path+'%'
 IF (@PageSize>0)
 BEGIN
 DECLARE @TotalPage int
 Select @TotalPage=Count(Identifier) FROM Area Where
 (@Identifier IS NULL or Identifier=@Identifier)AND
 (@ParentId IS NULL or ParentId=@ParentId)AND
 (@AreaLevel IS NULL or AreaLevel=@AreaLevel)AND
 (@Children IS NULL or Children=@Children)AND
 (@AreaName IS NULL or AreaName Like @AreaName)AND
 (@Path IS NULL or Path Like @Path)AND
 (@Status IS NULL or Status=@Status)AND
 (@Alt IS NULL or Alt=@Alt)
 IF(@TotalPage%@PageSize=0)
 BEGIN
 SET @TotalPage=@TotalPage/@PageSize
 END
 ELSE
 BEGIN
 SET @TotalPage=Round(@TotalPage/@PageSize,0)+1
 END
 Select TOP (@PageSize) Identifier,ParentId,AreaLevel,Children,AreaName,Path,Status,Alt,@TotalPage as totalPage FROM Area Where
 Identifier NOT IN (Select Top (@PageSize*(@CurrentPage-1))Identifier FROM Area Where
 (@Identifier IS NULL or Identifier=@Identifier)AND
 (@ParentId IS NULL or ParentId=@ParentId)AND
 (@AreaLevel IS NULL or AreaLevel=@AreaLevel)AND
 (@Children IS NULL or Children=@Children)AND
 (@AreaName IS NULL or AreaName Like @AreaName)AND
 (@Path IS NULL or Path Like @Path)AND
 (@Status IS NULL or Status=@Status)AND
 (@Alt IS NULL or Alt=@Alt)
 order by AreaName asc)
 AND
 (@Identifier IS NULL or Identifier=@Identifier)AND
 (@ParentId IS NULL or ParentId=@ParentId)AND
 (@AreaLevel IS NULL or AreaLevel=@AreaLevel)AND
 (@Children IS NULL or Children=@Children)AND
 (@AreaName IS NULL or AreaName Like @AreaName)AND
 (@Path IS NULL or Path Like @Path)AND
 (@Status IS NULL or Status=@Status)AND
 (@Alt IS NULL or Alt=@Alt)
 order by AreaName asc
 END
 ELSE
 BEGIN
 Select Identifier,ParentId,AreaLevel,Children,AreaName,Path,Status,Alt FROM Area Where
 (@Identifier IS NULL or Identifier=@Identifier)AND
 (@ParentId IS NULL or ParentId=@ParentId)AND
 (@AreaLevel IS NULL or AreaLevel=@AreaLevel)AND
 (@Children IS NULL or Children=@Children)AND
 (@AreaName IS NULL or AreaName Like @AreaName)AND
 (@Path IS NULL or Path Like @Path)AND
 (@Status IS NULL or Status=@Status)AND
 (@Alt IS NULL or Alt=@Alt)
 order by AreaName asc
 END
 END
 (编辑:南平站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |