2012-10-04 2 views
0

J'ai une requête importante qui récupère les contacts en fonction d'une recherche. Voici un exemple simplifié de la requête. (Tableau et les champs ont été changés pour protéger les innocents.)Limite d'une requête SQL Server (à utiliser pour la pagination)

SELECT DISTINCT TOP 20 DB1.FieldID, DB1.Field1, DB.Field2, DB.Field3, 
DB2.Field88, DB3.Field77 
FROM tblLamp DB1 
LEFT JOIN tblSand DB2 ON DB2.FieldID = DB1.FieldID 
LEFT JOIN tblLime DB3 ON DB3.FieldID = DB1.FieldID 
WHERE (Field1 LIKE 'hotwet%' ESCAPE '!' OR Field2 LIKE 'maarten%' ESCAPE '!') 
AND DB2.Field99 != '1111-2222-3333-4444' 
AND (DB1.CreatorID IN (...) OR DB1.OwnerID IN (...) OR DB1.FieldID IN (...)) 
ORDER BY DB1.Field1 ASC, DB1.Field2 ASC 

J'ai trouvé beaucoup d'exemples sur le web qui utilisent ROW_NUMBER() mais je n'ai pas été en mesure de le faire fonctionner avec ce question. Des idées?

Répondre

0

Vous pouvez utiliser ce petit exemple comme guide:

declare @test table(id int, name varchar(255)); 
insert into @test 
    select 1, 'one' union 
    select 2, 'two' union 
    select 3, 'three' union 
    select 4, 'four' union 
    select 5, 'five' union 
    select 6, 'six'; 

select 
    * 
from 
(
    -- select the columns you need and include row number to enable limit 
    select 
    name, 
    row_number() over(order by id) as rownumber 
    from 
    @test 
) v1 
where 
    rownumber between 2 and 4 
+0

J'utilise quelque chose de similaire à cela. Merci de votre aide. –