Resultados rownumbering y filtrados de SQL Server

Tengo una aplicación en la que necesito mostrar "páginas" de datos en una lista. La idea básica es bastante común. La pantalla muestra una lista de elementos y en la parte inferior de la pantalla hay algunos tipos de controles que le permiten ir a la siguiente "página" de datos.

Todo bien y bien. Tengo este trabajo.

A continuación se muestra el SQL en una vista que estoy usando para admitir el comportamiento "siguiente".

CREATE VIEW CampaignParticipants AS
SELECT  row_number() OVER (ORDER BY TPT.LastName, TPT.FirstName, TPT.DoB) AS RowNumber
        ,CGP.*
        ,TPT.*
FROM    tblCampaignGEDPush CGP
JOIN    tblParticipants TPT
ON      CGP.PartID = TPT.PartID

Así es como uso el VIEW.

SELECT  *
FROM    CampaignParticipants
WHERE   RowNumber >= 0
AND     RowNumber <= 100

Esto simula la captura de la "primera página" de 100 resultados de la VISTA. Páginas a través de cada conjunto de resultados solo peachy.

Genial .. PERO

Como algunos de ustedes que han tratado con esto, probablemente estén conscientes, esto es defectuoso. Si quiero buscar enTPT.LastName like 'R%' Y obtener el primer conjunto de resultados, estoy condenado.

Voy a querer empezar a mirarRowNumber = 0, detente enRowNumber = 100, pero los resultados de "R" probablemente estarán fuera de ese rango. Resultado: la lista vuelve vacía.

Y se vuelve más pegajoso: el usuario quiere poder "filtrar" en Apellido, Nombre, DoB, Ubicación, Teléfono, Zip, cualquier cosa.

** edición: realmente no puedo poner el filtro en la consulta "interna", ya que está en una vista, y el filtro puede cambiar arbitrariamente

Alguien tiene alguna idea de cómo obtener este conjunto de resultados.row_number() sobre elfiltrado conjunto de resultados?

Respuestas a la pregunta(3)

Su respuesta a la pregunta