Como posso estender esta consulta SQL para encontrar os k vizinhos mais próximos?

Eu tenho um banco de dados cheio de dados bidimensionais - pontos em um mapa. Cada registro possui um campo do tipo de geometria. O que eu preciso fazer é passar um ponto para um procedimento armazenado que retorna ok pontos mais próximos (k também seria passado para o sproc, mas isso é fácil). Encontrei uma consulta emhttp://blogs.msdn.com/isaac/archive/2008/10/23/nearest-neighbors.aspx que fica com o vizinho mais próximo, mas não consigo descobrir como estendê-lo para encontrar ok vizinhos mais próximos.

Esta é a consulta atual -T é a mesag é o campo da geometria@x é o ponto para pesquisar,Numbers é uma tabela com números inteiros 1 an:

DECLARE @start FLOAT = 1000; 
WITH NearestPoints AS
(
     SELECT TOP(1) WITH TIES *,  T.g.STDistance(@x) AS dist
     FROM Numbers JOIN T WITH(INDEX(spatial_index)) 
     ON T.g.STDistance(@x) < @start*POWER(2,Numbers.n)
     ORDER BY n
)
SELECT TOP(1) * FROM NearestPoints
ORDER BY n, dist

A consulta interna seleciona a região não vazia mais próxima e a consulta externa seleciona o resultado principal dessa região; a consulta externa pode ser facilmente alterada para (por exemplo)SELECT TOP(20), mas se a região mais próxima contiver apenas um resultado, você ficará preso a isso.

Eu acho que provavelmente preciso procurar recursivamente a primeira região que contémk registros, mas sem o uso de uma variável de tabela (o que causaria problemas de manutenção, pois você precisará criar a estrutura da tabela e poderá sofrer alterações - existem muitos campos), não consigo ver como.

questionAnswers(2)

yourAnswerToTheQuestion