Haversine formula usando el servidor SQL para encontrar el lugar más cercano - vb.net

Estoy tomando un código postal de un formulario. Luego puedo convertir este código postal a coordenadas lng, lat, ya que las tengo almacenadas en una tabla.

SELECT lng, lat from postcodeLngLat WHERE postcode = 'CV1'

Tengo otra tabla que almacena el lng, lat de una selección de lugares.

SELECT v.lat, v.lng, v.name, p.lat, p.lng, p.postcode, 'HAVERSINE' AS distance FROM venuepostcodes v, postcodeLngLat p WHERE p.outcode = 'CB6' ORDER BY distance

Lo que estoy tratando de hacer es crear una cuadrícula de datos que muestre la distancia de cada lugar desde el código postal (CV1 en este caso). Sé que la fórmula de Haversine debería hacer lo que estoy tratando de lograr, pero no sé dónde debería comenzar a incorporarla en mi consulta. Creo que la fórmula debe ir donde he puesto'HAVERSINE' en la consulta anterior.

¿Algunas ideas

EDITA

SELECT o.outcode AS lead_postcode, v.venue_name, 6371.0E * ( 2.0E *asin(case when 1.0E < (sqrt(square(sin(((RADIANS(CAST(o.lat AS FLOAT)))-(RADIANS(CAST(v.lat AS FLOAT))))/2.0E)) + (cos(RADIANS(CAST(v.lat AS FLOAT))) * cos(RADIANS(CAST(o.lat AS FLOAT))) * square(sin(((RADIANS(CAST(o.lng AS FLOAT)))-(RADIANS(CAST(v.lng AS FLOAT))))/2.0E))))) then 1.0E else (sqrt(square(sin(((RADIANS(CAST(o.lat AS FLOAT)))-(RADIANS(CAST(v.lat AS FLOAT))))/2.0E)) + (cos(RADIANS(CAST(v.lat AS FLOAT))) * cos(RADIANS(CAST(o.lat AS FLOAT))) * square(sin(((RADIANS(CAST(o.lng AS FLOAT)))-(RADIANS(CAST(v.lng AS FLOAT))))/2.0E))))) end )) AS distance FROM venuepostcodes v, outcodepostcodes o WHERE o.outcode = 'CB6' ORDER BY distance

Respuestas a la pregunta(2)

Su respuesta a la pregunta