рдирдпрд╛ SQL рд╕рд░реНрд╡рд░ 2011 (Denali) рджреЛ рдЙрдЪреНрдЪ рдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдСрд░реНрдбрд░ рдмрд╛рдп рдХрдорд╛рдВрдб рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
- рдСрдлрд╕реЗрдЯ (рдСрдлрд╕реЗрдЯ)
- рдкрд╣рд▓реЗ рд▓рд╛рдПрдВ рдпрд╛ рдЕрдЧрд▓рд╛ рд▓реЗрдВ ( рдкрд╣рд▓реЗ рд▓реЗрдВ ... рдпрд╛ рдЕрдЧрд▓рд╛ рд▓реЗрдВ ... )
рдУрдлрд╝реНрд╕реЗрдЯ
рдЗрд╕ рдЖрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ: рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ 100 рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ 100 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣рд▓реЗ 10 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдФрд░ 11 рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдм рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рджреНрд╡рд╛рд░рд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
Select * From <SomeTable> Order by <SomeColumn> Offset 10 Rows
рдЙрди рдХрд╛рдорд░реЗрдбреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬреЛ .Net рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ,
рд╕реНрдХрд┐рдк рдХрд▓реЗрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐, рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреА рд╣реИ, рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рддреЛ
рдСрдлрд╕реЗрдЯ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджреЗрд╢ рджрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдСрдлрд╕реЗрдЯ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдЬрд┐рд╕рдореЗрдВ рдСрдлрд╕реЗрдЯ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдСрдлрд╕реЗрдЯ рдХреЗ рдмрд╛рдж рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдпрд╣ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдирд┐рд░реНрдорд┐рдд рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛:
рдХрд╛рд░реНрдп 1. рдкрд╣рд▓реЗ 10 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рдмрд╛рдХреА рдХреЛ рджрд┐рдЦрд╛рдПрдВредрдкрдЯрдХрдерд╛ рд╕рд░рд▓ рд╣реЛрдЧреАред
Select * From @tblSample Order by Age Offset 10 Row
рдпрд╛
Select * From @tblSample Order by Age Offset (10) Rows
рдЖрдЙрдЯрдкреБрдЯ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛:
Person Name Age Address Person Name11 11 Address11 Person Name12 12 Address12 . . . . . . . . . . . . . . . . . . . .. . . . . . . . . Person Name49 49 Address49 Person Name50 50 Address50
рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рд╕ рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:
рдкрдВрдХреНрддрд┐ рдпрд╛
рдкрдВрдХреНрддрд┐рдпрд╛рдБ - рд╡реЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдорд╛рдирд╛рд░реНрдереА рд╣реИрдВред
рдХрд╛рд░реНрдп 2. рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ
рдХрд╛рд░реНрдп 3. рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
рдорд╛рд╕реНрдЯрд░ рд╕реЗ MAX (рд╕рдВрдЦреНрдпрд╛) / 99999999 рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ ред 14 рдирдВрдмрд░ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВрдЧреЗред
рдХрд╛рд░реНрдп 4. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдХрд┐рдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВред Select * From @tblSample Order by Age Offset (select dbo.fn_test()) Rows
рд╕реНрдХреЗрд▓рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдб
CREATE FUNCTION fn_test() RETURNS int AS BEGIN Declare @ResultVar as int Select @ResultVar = 10 RETURN @ResultVar END GO
рдХрд╛рд░реНрдп 5. рдЕрдВрджрд░ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ, рдХрд╛рд░реНрдпреЛрдВ, рдЙрдкрд╢реНрд░реЗрдгрд┐рдпреЛрдВ, рдиреЗрд╕реНрдЯреЗрдб рдЯреЗрдмрд▓, рдХреЙрдорди рдЯреЗрдмрд▓ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ (рдХреЙрдорди рдЯреЗрдмрд▓ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ - рд╕реАрдЯреАрдИ) рджреНрд╡рд╛рд░рд╛ рдСрд░реНрдбрд░ рдХреЗ рд╕рд╛рде рдСрдлрд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛редрдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
;With Cte As ( Select * From @tblSample Order By Age Offset 10 Rows) Select * From Cte
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдиреЗрд╕реНрдЯреЗрдб рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░ рдСрдлрд╕реЗрдЯ рдФрд░ рдСрд░реНрдбрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
Select * From (Select * From @tblSample Where Age >10 Order By Age Offset 10 Rows) As PersonDerivedTable
рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд╕рд╛рде рдСрдлрд╕реЗрдЯ рдФрд░ рдСрд░реНрдбрд░ рдХреЗ рдХрд╛рдо рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдгред
рдЬрдм рдСрдлрд╕реЗрдЯ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛
1. рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ "рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐" рд╣реИ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд┐рдирд╛ рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
Select * From @tblSample Offset (10) Rows
рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ
рдПрдордПрд╕рдЬреА 102, рд▓реЗрд╡рд▓ 15, рд╕реНрдЯреЗрдЯ 1, рд▓рд╛рдЗрди 21 '10' рдХреЗ рдкрд╛рд╕ рдЧрд▓рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ред2. рдЖрдк рдСрдлрд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рди рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
Select * From @tblSample Order by Age Offset (-10) Rows
SQL рд╕рд░реНрд╡рд░ рдЗрдВрдЬрди рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛
Msg 10742, рд╕реНрддрд░ 15, рд░рд╛рдЬреНрдп 1, рдкрдВрдХреНрддрд┐ 22 OFFSET рдХреНрд▓реЙрдЬ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдСрдлрд╕реЗрдЯ рдирдХрд╛рд░рд╛рддреНрдордХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред3. рдЖрдк рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
Select * From @tblSample Order by Age Offset 10.5 Rows
рдпрд╛
Select * From @tblSample Order by Age Offset Null Rows
рд╣рдореЗрдВ рджреЗрдВрдЧреЗ
Msg 10743, рд╕реНрддрд░ 15, рд░рд╛рдЬреНрдп 1, рдкрдВрдХреНрддрд┐ 24 OFFSET рдХреНрд▓реЙрдЬ рдХреЗ рд▓рд┐рдП рджреА рдЧрдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред4.
рдУрд╡рд░ () рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЕрдВрджрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
;With Cte As ( Select *, Rn = Row_Number() Over(Order by Age Offset 10 Rows) From @tblSample ) Select * from Cte
рдЕрдиреБрд░реЛрдз рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рд╣рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИ
рдПрдордПрд╕рдЬреА 102, рд╕реНрддрд░ 15, рд░рд╛рдЬреНрдп 1, рд▓рд╛рдЗрди 22 'рдСрдлрд╕реЗрдЯ' рдХреЗ рдкрд╛рд╕ рдЧрд▓рдд рд╕рд┐рдВрдЯреИрдХреНрд╕редрдлрд╝реЗрдЪ рдкреНрд░рдердо / рдлрд╝реЙрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдпреЗ рдХреАрд╡рд░реНрдб рдСрдлрд╝рд╕реЗрдЯ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рд▓реМрдЯреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 100 рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рдкрд╣рд▓реЗ 10 рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЕрдЧрд▓реА 5 рд▓рд╛рдЗрдиреЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреА рд╣реЛрдВрдЧреАред рдпрд╛рдиреА 11 рд╕реЗ 15 рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЬрд░реВрд░рдд рд╣реИред
Select * From <SomeTable> Order by <SomeColumn> Offset 10 Rows Fetch Next 5 Rows Only;
рдРрд╕реА рдХреНрд╡реЗрд░реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рдПрдЧреАред .Net рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рддреБрд░рдВрдд рдЯреЗрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВрдЧреЗред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдБ рдЖрдк рдЗрди рдЦреЛрдЬрд╢рдмреНрджреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдп 1. рдкрд╣рд▓реЗ 10 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдЫреЛрдбрд╝реЗрдВ рдФрд░ рдЕрдЧрд▓реЗ 5 рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ Select * From @tblSample Order by Age Offset 10 Row Fetch First 5 Rows Only
рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:
Person Name Age Address Person Name11 11 Address11 Person Name12 12 Address12 Person Name13 13 Address13 Person Name14 14 Address14 Person Name15 15 Address15
рдХрд╛рд░реНрдп 2. рдПрдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрди рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЖрдк рдСрдлрд╝рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рднреА рд╡рд╣реА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдкрд╢реНрд░реЗрдгрд┐рдпрд╛рдБ, рд╡рд┐рдЪрд╛рд░, рдХрд╛рд░реНрдп рдЖрджрд┐ред
рдЬрдм рдкрд╣рд▓реА рдмрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ / рдЕрдЧрд▓реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ
рдЗрди рдЦреЛрдЬрд╢рдмреНрджреЛрдВ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдСрдлрд╕реЗрдЯ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред
рдСрдлрд╕реЗрдЯ рдФрд░ Fetch рдЕрдЧрд▓рд╛ рд╕рд┐рдореБрд▓реЗрд╢рди Sql Server 2005/2008 рдХреЗ рд▓рд┐рдП
SQL рд╕рд░реНрд╡рд░ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдЖрдк Row_Number () рд░реИрдВрдХрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреЗрд╢рдХ, рдХреЛрдб рдЗрддрдирд╛ рд╕реБрдВрджрд░ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╣реАрдВ рдерд╛:
CTE рдХреЗ рдЕрдВрджрд░, рдПрдХ рд╕рд░реНрд╡рд┐рд╕ рдХреЙрд▓рдо рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдмрд╕ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕рдВрдЦреНрдпрд╛ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдирд╣реАрдВ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВред
рдСрдлрд╕реЗрдЯ рдФрд░ Fetch рдЕрдЧрд▓рд╛ рд╕рд┐рдореБрд▓реЗрд╢рди Sql Server 2000 рдХреЗ рд▓рд┐рдП
рдЗрди рдкреНрд░рд╛рдЪреАрди рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд░реИрдВрдХрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдереЗ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░, рдПрдХ рдСрдЯреЛ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдкрд┐:
Declare @RowSkip As int Declare @RowFetch As int Set @RowSkip = 10 Set @RowFetch = 5
рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЬрд╣рд╛рдВ рд▓рдХреНрд╖реНрдп рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдбреЗрдЯрд╛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдСрдЯреЛ-рдЗрдиреНрдХреНрд░реАрдореЗрдВрдЯ рдлрд╝реАрд▓реНрдб рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рддрдм рдЖрд╡рд╢реНрдпрдХ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдордп рдФрд░ рд╕рдВрд╕рд╛рдзрди рдорд╛рдк рдХреЗ рд╕рд╛рде рдСрдлрд╕реЗрдЯ рдФрд░ рдлрд╝реЗрдЪ рдЕрднреНрдпрд╛рд╕
рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдСрдлрд╝рд╕реЗрдЯ рдФрд░ рдлрд╝рд┐рдЪ рдХреЗ рдЙрдкрдпреЛрдЧ рдФрд░ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рд╕рднреА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдиреЗ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд╕рдордЭ рджреА рд╣реИ рдХрд┐ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ рдФрд░ рдЖрдк рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖред рдЖрдЧреЗ рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬрдм рдСрдлрд╝рд╕реЗрдЯ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди SQL рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдорд╛рдк рдХреЗ рдкрд░рд┐рдгрд╛рдо рднреА рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЯреЗрд╕реНрдЯ 1 рдорд┐рд▓рд┐рдпрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдирдореВрдиреЗ рдкрд░ рдЪрд▓рд╛рдП рдЬрд╛рдПрдВрдЧреЗред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ
рдЦрд╛рддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВред
рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдбреЗрдЯрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд┐рдВрдЧ
рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд░рд┐рдХреЙрд░реНрдб рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреЗрдЬ рдмреНрд░рд╛рдЙрдЬрд╝рд┐рдВрдЧ рд╕рдмрд╕реЗ рдЖрдо рдХрд╛рд░реНрдп рд╣реИред рдЕрдм рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдХреНрд╖ рдФрд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рджреЛрдиреЛрдВ рдкрд░ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рдкреЗрдЬрд┐рдВрдЧ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рдЯреЗрдмрд▓, рдпрд╛ рдореЗрдореЛрд░реА рдореЗрдВ рдЗрд╕рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд▓реЛрдб рдХрд░рдирд╛ред рджреВрд╕рд░реА рдУрд░, рдпрд╣ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЗрд╡рд▓ рд╡рд╛рдВрдЫрд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ, рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдЖрд╡реЗрджрди рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддреЗрдЬреА рд╣реИред
рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╣рд▓реЗ 20,000 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ рдФрд░ рдЕрдЧрд▓реЗ 50,000 рдХреЛ рд▓реЗ рд▓реЗрдВрдЧреЗред
SQL Server 2000 рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред
рд▓реАрдб рд╕рдордп:SQL рд╕рд░реНрд╡рд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп:
рд╕реАрдкреАрдпреВ рд╕рдордп = 110 рдПрдордПрд╕, рдмреАрддрд╛ рд╣реБрдЖ рд╕рдордп = 839 рдПрдордПрд╕ред
рдореИрдВ / рдУ рдЖрдБрдХрдбрд╝реЗ:рд╕реНрдХреИрди рдЧрд┐рдирддреА 1,
рддрд╛рд░реНрдХрд┐рдХ 8037 рдкрдврд╝рддрд╛ рд╣реИ,
рднреМрддрд┐рдХ рдкрд╛рда 0,
рдЖрдЧреЗ рдкрдврд╝реЗ 0,
рд▓реЛрдм рддрд╛рд░реНрдХрд┐рдХ рдкрдврд╝рддрд╛ рд╣реИ 0,
рд▓реЛрдм рд╢рд╛рд░реАрд░рд┐рдХ рдкрдврд╝реЗрдВ 0,
рд▓реЛрдм рдкрдврд╝рд╛-рд▓рд┐рдЦрд╛ рдЖрдЧреЗ рдкрдврд╝рддрд╛ рд╣реИ режред
SQL Server 2005/2008 рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг
DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE USE TSQLDB; GO SET STATISTICS IO ON; SET STATISTICS TIME ON; GO Declare @RowSkip As int Declare @RowFetch As int Set @RowSkip = 20000 Set @RowFetch = 50000 ;With Cte As ( Select rn=ROW_NUMBER() Over(Order by (Select 1)) ,* From dbo.tblSample ) Select [Person ID] ,[Person Name] ,Age ,DOB ,Address From Cte Where rn Between (@RowSkip+1) <em> </em> And (@RowSkip+ @RowFetch) GO SET STATISTICS IO OFF; SET STATISTICS TIME OFF; GO
рд▓реАрдб рд╕рдордп:SQL рд╕рд░реНрд╡рд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп:
рд╕реАрдкреАрдпреВ рд╕рдордп = 78 рдПрдордПрд╕, рдмреАрддрд╛ рд╣реБрдЖ рд╕рдордп = 631 рдПрдордПрд╕ред
рдореИрдВ / рдУ рдЖрдБрдХрдбрд╝реЗ:рд╕реНрдХреИрди рдЧрд┐рдирддреА 1,
рддрд╛рд░реНрдХрд┐рдХ рдкрдврд╝рддрд╛ рд╣реИ 530,
рднреМрддрд┐рдХ рдкрд╛рда 0,
рдЖрдЧреЗ рдкрдврд╝реЗ 1549,
рд▓реЛрдм рддрд╛рд░реНрдХрд┐рдХ рдкрдврд╝рддрд╛ рд╣реИ 0,
рд▓реЛрдм рд╢рд╛рд░реАрд░рд┐рдХ рдкрдврд╝реЗрдВ 0,
рд▓реЛрдм рдкрдврд╝рд╛-рд▓рд┐рдЦрд╛ рдЖрдЧреЗ рдкрдврд╝рддрд╛ рд╣реИ режред
SQL рд╕рд░реНрд╡рд░ 2011 рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг
DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE USE TSQLDB; GO SET STATISTICS IO ON; SET STATISTICS TIME ON; GO Declare @RowSkip As int Declare @RowFetch As int Set @RowSkip = 20000 Set @RowFetch = 50000 Select * From dbo.tblSample Order by (Select 1) Offset @RowSkip Row Fetch Next @RowFetch Rows Only; GO SET STATISTICS IO OFF; SET STATISTICS TIME OFF; GO
рд▓реАрдб рд╕рдордп :SQL рд╕рд░реНрд╡рд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп:
рд╕реАрдкреАрдпреВ рд╕рдордп = 47 рдПрдордПрд╕, рдмреАрддрд╛ рд╣реБрдЖ рд╕рдордп = 626 рдПрдордПрд╕ред
рдореИрдВ / рдУ рдЖрдБрдХрдбрд╝реЗ:рд╕реНрдХреИрди рдЧрд┐рдирддреА 1,
рддрд╛рд░реНрдХрд┐рдХ рдкрдврд╝рддрд╛ рд╣реИ 530,
рднреМрддрд┐рдХ рдкрд╛рда 0,
рдЖрдЧреЗ рдкрдврд╝реЗ 1549,
рд▓реЛрдм рддрд╛рд░реНрдХрд┐рдХ рдкрдврд╝рддрд╛ рд╣реИ 0,
рд▓реЛрдм рд╢рд╛рд░реАрд░рд┐рдХ рдкрдврд╝реЗрдВ 0,
рд▓реЛрдм рдкрдврд╝рд╛-рд▓рд┐рдЦрд╛ рдЖрдЧреЗ рдкрдврд╝рддрд╛ рд╣реИ режред
рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдгрд╛рдо рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп (рд╕реАрдкреАрдпреВ рд╕рдордп) рдФрд░ рд░рдирдЯрд╛рдЗрдо (рдмреАрддрдиреЗ рдХрд╛ рд╕рдордп - рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рдордп) рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред рдорд╛рдк рдХреА рддреБрд▓рдирд╛ рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИ:
Sql рд╕рд░реНрд╡рд░ рд╕рдВрд╕реНрдХрд░рдг | рд╕реАрдкреАрдпреВ рд╕рдордп | рдмреАрддрд╛ рд╣реБрдЖ рд╕рдордп |
2000 | 110ms | 839 рдорд┐ |
2005/2008 | 78ms | 631 рдорд┐ |
2011 | 46ms | 626 рдорд┐ |
рддрд╛рд▓рд┐рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рддреА рд╣реИ рдХрд┐ рдирдпрд╛ SQL рд╕рд░реНрд╡рд░ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬ рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдкрдХреА рдорд╢реАрди рдХреЗ рд▓рд┐рдП, рд╕рдордп рдорд╛рдк рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдирдП рд╕рд░реНрд╡рд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╣рдореЗрд╢рд╛ рдЕрдзрд┐рдХ рд░рд╣реЗрдЧрд╛ред
рд╢реАрд░реНрд╖ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ
рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ Denali рдХреА рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ TOP рдХреА рдЬрдЧрд╣ рд▓реЗ рд╕рдХрддреА рд╣реИрдВред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рд╕реНрдерд┐рддрд┐ рд▓реЗрдВрдЧреЗ рдЬрдм рдХрд┐рд╕реА рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдкрд╣рд▓реЗ 10 рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛред
рдкрд┐рдЫрд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рджреГрд╖реНрдЯрд┐рдХреЛрдг Select Top(10) [Person ID] ,[Person Name] ,Age ,DOB ,Address From dbo.tblSample Order By Age Desc
SQL рд╕рд░реНрд╡рд░ Denali рдореЗрдВ рд╕рдВрднрд╡ рджреГрд╖реНрдЯрд┐рдХреЛрдг Select [Person ID] ,[Person Name] ,Age ,DOB ,Address From dbo.tblSample Order By Age Desc Offset 10 Rows
рдЬреИрд╕рд╛ рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ , рдпрд╣ рдЧрд▓рдд рдХреЛрдб рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╢реАрд░реНрд╖ (10) рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛ рджреЗрдЧрд╛редрдЪрдХреНрд░ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг:
MS SQL рд╕рд░реНрд╡рд░ 2011: рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рдбреЗрдЯрд╛рдмреЗрд╕ , рдирдпрд╛ рдЕрдиреБрдХреНрд░рдо рдСрдмреНрдЬреЗрдХреНрдЯ , рдСрдлрд╕реЗрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ , рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ , рд░рд┐рдЬрд▓реНрдЯ рд╕реЗрдЯ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде , SSMS рдореЗрдВ рдирдпрд╛ ред