Ну, это не такой чистый подход, как использование STWithin, но вы могли бы сделать это с помощью "STDifference". Я подготовил небольшой пример:
По сути, есть большой прямоугольник, который служит контейнером. Также есть два прямоугольника, «внутри» и «снаружи», где первый полностью содержится в «контейнере», а второй только частично.
Идея состоит в том, чтобы просто проверить, имеет ли STDifference между ребенком и родителем какие-либо точки (трюк в направлении вызова).
declare @container geography;
declare @inside geography;
declare @outside geography;
select @container = geography::STGeomFromText('POLYGON((-10 10, -10 0, 0 0, 0 10, -10 10))', 4326); -- large rectangle (container)
select @inside = geography::STGeomFromText('POLYGON((-9 9, -9 1, -1 1, -1 9, -9 9))', 4326); -- smaller rectangle (fully contained)
select @outside = geography::STGeomFromText('POLYGON((-9 9, -9 1, 2 1, 2 9, -9 9))', 4326); -- smaller rectangle (partially contained)
select @inside.STDifference(@container).STNumPoints() as [Points Outside Container] -- returns 0
select @outside.STDifference(@container).STNumPoints() as [Points Outside Container] -- returns > 0