Reply to Re: Paging records on SQL server using derived tables : more question

Your name:

Reply:


Posted by rbg on 01/29/07 14:02

Please find attached the complete query:

Declare @WorkType varchar(3), @PermitteeNumber varchar(5), @Boro
varchar(1)
Declare @IssueDateFrom datetime, @IssueDateTo datetime
Declare @SortExpression varchar(50), @SortOrder varchar(5)
Declare @PageNum int, @PageSize int

select @PageNum = 2, @PageSize = 1000
Declare @rowsToRetrieve int
Declare @SortOrderMirror varchar(4)

if @SortOrder = 'ASC'
SET @SortOrderMirror = 'DESC'
else
SET @SortOrderMirror = 'ASC'

SET @rowsToRetrieve = @PageNum * @PageSize

Declare @TotalRows int

SET @TotalRows = 1600

SET @PageSize = @TotalRows%@PageSize

select @WorkType = '01%', @PermitteeNumber = '00180', @Boro = 'M'
select @IssueDateFrom = '01/24/2001', @IssueDateTo = '01/24/2007'
select @SortExpression = 'WorkStart', @SortOrder = 'DESC'

Select * from ( Select Top 600 * from
( Select Top 2000 * from
( Select Top 2000 PermitNumber, HouseNumber, OnStreetName,
FromStreetName, ToStreetName, WorkStartDate as "WorkStart",
tbl_Permittee.Permittee_name as PermitteeName, PermitteeNumber,
PermitType_ID as "Type",
InspectionDistrict,
PermitStatus,
IssueDate
>From PermitMain inner join tbl_Permittee
on PermitMain.PermitteeNumber = tbl_Permittee.Permittee_Number
and (tbl_Permittee.Permittee_name_flag = 'd' or
tbl_Permittee.Permittee_name_flag = 'p')
where
(PermitType_ID like @WorkType ) and worktypeid is null
and ((IssueDate between @IssueDateFrom and @IssueDateTo) or
(EmergIssueDate between @IssueDateFrom and @IssueDateTo))

and PermitteeNumber = @PermitteeNumber

and PermitMain.Boroughcode = @Boro

order by WorkStart DESC

) as T2 order by WorkStart ASC

) as T3

) as T4 order by WorkStart DESC
=======================================================================
=
if I replace the above where clause from PermitType_ID like
@WorkType to PermitType_ID like '01%'
The results are returned within 30 secs, else it takes forever.

Any Help will be grately appreciated.

TIA..
=======================================================================
=
On Jan 26, 5:50 pm, Erland Sommarskog <esq...@sommarskog.se> wrote:
> rbg (rbg....@gmail.com) writes:
> > In the Stored proc I am using a String variable @SQLString
> > varchar(2000) to hold the entire select statement, and then executing
> > that SQL using EXEC (@SQLString).
>
> > Thus for debugging, I used Query Analyzer, and within the Analyzer I am
> > using the Select statement.
> > So in my test I do not use any stored proc.
>
> > so one select statement says:
> >...
>
> > Select * from ( Select Top 600 * from
> > ( Select Top 2000 * from
> > ( Select Top 2000 PermitNumber, HouseNumber, OnStreetName,
> > FromStreetName, ToStreetName, WorkStartDate as "WorkStart",
> > tbl_Permittee.Permittee_name as PermitteeName, PermitteeNumber,
> > PermitType_ID as "Type",
> > InspectionDistrict,
> > PermitStatus,
> > IssueDate
> >>From PermitMain inner join tbl_Permittee
> > on PermitMain.PermitteeNumber = tbl_Permittee.Permittee_Number
> > and (tbl_Permittee.Permittee_name_flag = 'd' or
> > tbl_Permittee.Permittee_name_flag = 'p')
> > where
> > (PermitType_ID like @WokStart ) and worktypeid is null
> > and ((IssueDate between @IssueDateFrom and @IssueDateTo) or
> > (EmergIssueDate between @IssueDateFrom and @IssueDateTo))
> > and PermitteeNumber = @PermitteeNumber
> > and PermitMain.Boroughcode = @Boro
> > order by WorkStart DESC
> > ) as T2 order by WorkStart ASC
> > ) as T3
> > ) as T4 order by WorkStart DESC
>
> > TAKES FOREVER to COMPLETE.Yes, but how does those variables makes into the dynamic SQL? You said
> that you were using EXEC(), and EXEC() does not permit you to pass
> parameters. Does your complete SQL string look something like:
>
> DECLARE @Workstart, ...
>
> SELECT @Workstart = '01%'
> ...
> SEKECT * ....
>
> Then you have preclsely the problem that I discussed in my previous
> post. The optimizer has no clue of value @workstart has, and will make
> a blind assumption.
>
> But you should not use EXEC(). Use sp_executesql instead. sp_executesql
> permits you to pass parameters, and in this case the optimizer will
> be able to use be parameter values for guidance.
>
> Seehttp://www.sommarskog.se/dynamic_sql.html#sp_executesqlfor
> more details on sp_excecutsql.
>
> If you want further help, please post your entire SQL batch, that is
> the one that builds the dynamic SQL. It's a bit frustrating having to
> guess what you are doing - and you get better answers that way.
>
> --
> Erland Sommarskog, SQL Server MVP, esq...@sommarskog.se
>
> Books Online for SQL Server 2005 athttp://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books...
> Books Online for SQL Server 2000 athttp://www.microsoft.com/sql/prodinfo/previousversions/books.mspx

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация