рдПрдордПрд╕ SQL тАЛтАЛ2011 - рдирдпрд╛ рдСрдлрд╕реЗрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ

рдирдпрд╛ SQL рд╕рд░реНрд╡рд░ 2011 (Denali) рджреЛ рдЙрдЪреНрдЪ рдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдСрд░реНрдбрд░ рдмрд╛рдп рдХрдорд╛рдВрдб рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ:


рдУрдлрд╝реНрд╕реЗрдЯ


рдЗрд╕ рдЖрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ: рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ 100 рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ 100 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣рд▓реЗ 10 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдФрд░ 11 рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдм рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рджреНрд╡рд╛рд░рд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
Select * From <SomeTable> Order by <SomeColumn> Offset 10 Rows 

рдЙрди рдХрд╛рдорд░реЗрдбреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬреЛ .Net рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рд╕реНрдХрд┐рдк рдХрд▓реЗрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐, рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреА рд╣реИ, рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рддреЛ рдСрдлрд╕реЗрдЯ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджреЗрд╢ рджрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдСрдлрд╕реЗрдЯ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдЬрд┐рд╕рдореЗрдВ рдСрдлрд╕реЗрдЯ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ


рдСрдлрд╕реЗрдЯ рдХреЗ рдмрд╛рдж рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдпрд╣ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдирд┐рд░реНрдорд┐рдд рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛:
 --    Declare @tblSample Table ( [Person Name] Varchar(50) ,Age int ,Address Varchar(100) ) --   Insert into @tblSample Select 'Person Name' + CAST(Number AS VARCHAR) , Number ,'Address' + CAST(Number AS VARCHAR) From master..spt_values Where Type = 'p' And Number Between 1 and 50 

рдХрд╛рд░реНрдп 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. рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ
 --       -    Declare @RowSkip As int --      Set @RowSkip = 10 --   Select * From @tblSample Order by Age Offset @RowSkip Row 

рдХрд╛рд░реНрдп 3. рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ
 --    14  50 Select * From @tblSample Order by Age Offset (select MAX(number)/99999999 from master..spt_values) Rows 

рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдорд╛рд╕реНрдЯрд░ рд╕реЗ 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 

рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд╕рд╛рде рдСрдлрд╕реЗрдЯ рдФрд░ рдСрд░реНрдбрд░ рдХреЗ рдХрд╛рдо рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдгред
 --  view Create View vwPersonRecord AS Select * FROM tblSample GO --    view Select * From vwPersonRecord Where Age > 10 Order By Age Offset 10 Rows 


рдЬрдм рдСрдлрд╕реЗрдЯ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛


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; --  Fetch First 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. рдПрдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ
 --     Declare @RowSkip As int --    -   Declare @RowFetch As int -- -    Set @RowSkip = 10 -- -    Set @RowFetch = 5 --    11  15 Select * From @tblSample Order by Age Offset @RowSkip Row Fetch Next @RowFetch Rows Only; 

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрди рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЖрдк рдСрдлрд╝рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рднреА рд╡рд╣реА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдкрд╢реНрд░реЗрдгрд┐рдпрд╛рдБ, рд╡рд┐рдЪрд╛рд░, рдХрд╛рд░реНрдп рдЖрджрд┐ред

рдЬрдм рдкрд╣рд▓реА рдмрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ / рдЕрдЧрд▓реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ


рдЗрди рдЦреЛрдЬрд╢рдмреНрджреЛрдВ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдСрдлрд╕реЗрдЯ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред

рдСрдлрд╕реЗрдЯ рдФрд░ Fetch рдЕрдЧрд▓рд╛ рд╕рд┐рдореБрд▓реЗрд╢рди Sql Server 2005/2008 рдХреЗ рд▓рд┐рдП


SQL рд╕рд░реНрд╡рд░ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдЖрдк Row_Number () рд░реИрдВрдХрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреЗрд╢рдХ, рдХреЛрдб рдЗрддрдирд╛ рд╕реБрдВрджрд░ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╣реАрдВ рдерд╛:
 --      Declare @RowSkip As int --    -    Declare @RowFetch As int --   Set @RowSkip = 10 Set @RowFetch = 5 ;With Cte As ( Select rn=ROW_NUMBER() Over(Order by (Select 1) /*    */ ) ,* From @tblSample ) --    11  15 Select [Person Name] ,Age ,Address From Cte --   Offset  Fetch First/Fetch Next Where rn Between (@RowSkip+1) --  Offset And (@RowSkip+ @RowFetch) --  Fetch First/Fetch Next Clause 

CTE рдХреЗ рдЕрдВрджрд░, рдПрдХ рд╕рд░реНрд╡рд┐рд╕ рдХреЙрд▓рдо рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдмрд╕ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕рдВрдЦреНрдпрд╛ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдирд╣реАрдВ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВред

рдСрдлрд╕реЗрдЯ рдФрд░ Fetch рдЕрдЧрд▓рд╛ рд╕рд┐рдореБрд▓реЗрд╢рди Sql Server 2000 рдХреЗ рд▓рд┐рдП


рдЗрди рдкреНрд░рд╛рдЪреАрди рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд░реИрдВрдХрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдереЗ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░, рдПрдХ рдСрдЯреЛ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдкрд┐:
 Declare @RowSkip As int Declare @RowFetch As int Set @RowSkip = 10 Set @RowFetch = 5 --   ,    IF OBJECT_ID('tempdb..#Temp') IS NOT NULL BEGIN Drop Table #Temp END --   Create Table #Temp ( Rn int Identity ,[Person Name] Varchar(50) ,Age int ,Address Varchar(100) ) --    Insert Into #Temp([Person Name],Age,Address) Select [Person Name],Age,Address From @tblSample --    11  15 Select [Person Name] ,Age ,Address From #Temp --   Offset  Fetch First/Fetch Next Where Rn Between (@RowSkip+1) --  Offset And (@RowSkip+ @RowFetch) --  Fetch First/Fetch Next 

рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЬрд╣рд╛рдВ рд▓рдХреНрд╖реНрдп рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдбреЗрдЯрд╛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдСрдЯреЛ-рдЗрдиреНрдХреНрд░реАрдореЗрдВрдЯ рдлрд╝реАрд▓реНрдб рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рддрдм рдЖрд╡рд╢реНрдпрдХ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдордп рдФрд░ рд╕рдВрд╕рд╛рдзрди рдорд╛рдк рдХреЗ рд╕рд╛рде рдСрдлрд╕реЗрдЯ рдФрд░ рдлрд╝реЗрдЪ рдЕрднреНрдпрд╛рд╕


рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдСрдлрд╝рд╕реЗрдЯ рдФрд░ рдлрд╝рд┐рдЪ рдХреЗ рдЙрдкрдпреЛрдЧ рдФрд░ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рд╕рднреА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдиреЗ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд╕рдордЭ рджреА рд╣реИ рдХрд┐ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ рдФрд░ рдЖрдк рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖред рдЖрдЧреЗ рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬрдм рдСрдлрд╝рд╕реЗрдЯ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди SQL рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдорд╛рдк рдХреЗ рдкрд░рд┐рдгрд╛рдо рднреА рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЯреЗрд╕реНрдЯ 1 рдорд┐рд▓рд┐рдпрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдирдореВрдиреЗ рдкрд░ рдЪрд▓рд╛рдП рдЬрд╛рдПрдВрдЧреЗред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЦрд╛рддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВред
 --   tblSample,    IF OBJECT_ID('tblSample','U') IS NOT NULL BEGIN DROP TABLE tblSample END GO --   Create Table tblSample ( [Person ID]     Int Identity ,[Person Name] Varchar(100) ,Age Int ,DOB Datetime ,Address Varchar(100) ) GO --     Insert into tblSample Select 'Person Name' + CAST(N AS VARCHAR) , N ,DATEADD(D,N, '1900-01-01') ,'Address' + CAST(N AS VARCHAR) From dbo.tsqlc_Tally Where N Between 1 and 1000000 --   Select * From tblSample 


рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдбреЗрдЯрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд┐рдВрдЧ


рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд░рд┐рдХреЙрд░реНрдб рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреЗрдЬ рдмреНрд░рд╛рдЙрдЬрд╝рд┐рдВрдЧ рд╕рдмрд╕реЗ рдЖрдо рдХрд╛рд░реНрдп рд╣реИред рдЕрдм рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдХреНрд╖ рдФрд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рджреЛрдиреЛрдВ рдкрд░ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рдкреЗрдЬрд┐рдВрдЧ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рдЯреЗрдмрд▓, рдпрд╛ рдореЗрдореЛрд░реА рдореЗрдВ рдЗрд╕рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд▓реЛрдб рдХрд░рдирд╛ред рджреВрд╕рд░реА рдУрд░, рдпрд╣ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЗрд╡рд▓ рд╡рд╛рдВрдЫрд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ, рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдЖрд╡реЗрджрди рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддреЗрдЬреА рд╣реИред

рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╣рд▓реЗ 20,000 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ рдФрд░ рдЕрдЧрд▓реЗ 50,000 рдХреЛ рд▓реЗ рд▓реЗрдВрдЧреЗред

SQL Server 2000 рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг


 --      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 --  ,    IF OBJECT_ID('tempdb..#Temp') IS NOT NULL BEGIN Drop Table #Temp END --    Create Table #Temp ( Rn int Identity ,[Person ID] int ,[Person Name] Varchar(50) ,Age int ,DOB datetime ,Address Varchar(100) ) --      Insert Into #Temp([Person ID],[Person Name],Age,DOB,Address) Select [Person ID],[Person Name],Age,DOB,Address From dbo.tblSample --    20 000  70 000 Select [Person ID] ,[Person Name] ,Age ,DOB ,Address From #Temp --   Offset  Fetch First/Fetch Next Where Rn Between (@RowSkip+1) --  Offset And (@RowSkip+ @RowFetch) --  Fetch First/Fetch Next GO SET STATISTICS IO OFF; SET STATISTICS TIME OFF; GO 

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред

рд▓реАрдб рд╕рдордп:

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 рд╕рд░реНрд╡рд░ рд╕рдВрд╕реНрдХрд░рдгрд╕реАрдкреАрдпреВ рд╕рдордпрдмреАрддрд╛ рд╣реБрдЖ рд╕рдордп
2000110ms839 рдорд┐
2005/200878ms631 рдорд┐
201146ms626 рдорд┐



рддрд╛рд▓рд┐рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рддреА рд╣реИ рдХрд┐ рдирдпрд╛ 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 рдореЗрдВ рдирдпрд╛ ред

Source: https://habr.com/ru/post/In123491/


All Articles