Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
A térbeli adatokkal használt gyakori lekérdezés a legközelebbi szomszéd lekérdezés. A legközelebbi szomszéd lekérdezésekkel megkereshető egy adott térbeli objektum legközelebbi térbeli objektuma. Például egy webhely tárolókeresőjének gyakran meg kell találnia az ügyfél helyéhez legközelebbi tárolóhelyeket.
A legközelebbi szomszéd lekérdezések különböző érvényes lekérdezési formátumokban írhatók, de ahhoz, hogy a legközelebbi szomszéd lekérdezés térbeli indexet használjon, a következő szintaxist kell használni.
Syntax
SELECT TOP ( number )
[ WITH TIES ]
[ * | expression ]
[, ...]
FROM spatial_table_reference, ...
[ WITH
(
[ INDEX ( index_ref ) ]
[ , SPATIAL_WINDOW_MAX_CELLS = <value>]
[ ,... ]
)
]
WHERE
column_ref.STDistance ( @spatial_ object )
{
[ IS NOT NULL ] | [ < const ] | [ > const ]
| [ <= const ] | [ >= const ] | [ <> const ] ]
}
[ AND { other_predicate } ]
}
ORDER BY column_ref.STDistance ( @spatial_ object ) [ ,...n ]
[ ; ]
Legközelebbi szomszéd lekérdezés és térbeli indexek
Az SQL Serverben TOP és ORDER BY záradékok használatával hajthat végre legközelebbi szomszéd lekérdezést a térbeli adatoszlopokon. A ORDER BY záradék a térbeli oszlop adattípusának STDistance() metódusának hívását tartalmazza. A TOP záradék a lekérdezéshez visszaadandó objektumok számát jelzi.
A legközelebbi szomszéd lekérdezésnek a térbeli index használatához a következő követelményeknek kell megfelelnie:
A térbeli indexnek szerepelnie kell az egyik térbeli oszlopon, és a
STDistance()metódusnak ezt az oszlopot kell használnia aWHEREésORDER BYzáradékokban.A
TOPzáradék nem tartalmazhatPERCENTutasítást.A
WHEREzáradéknak tartalmaznia kell egySTDistance()metódust.Ha a
WHEREzáradékban több predikátum is szerepel, akkor aSTDistance()metódust tartalmazó predikátumotANDkötőszóval kell csatlakoztatni a többi predikátumhoz. ASTDistance()metódus nem szerepelhet aWHEREzáradék opcionális részében.A
ORDER BYzáradék első kifejezésének aSTDistance()metódust kell használnia.A
STDistance()záradék elsőORDER BYkifejezésének rendezési sorrendjeASC-nek kell lennie.Az összes sort, amelyeknél
STDistanceNULL-et ad vissza, ki kell szűrni.
Warning
Az földrajzi vagy geometriát argumentumként adattípusokat használó metódusok NULL adnak vissza, ha az SRID-k nem azonosak a típusok esetében.
Javasoljuk, hogy az új térbeli index-tessellációkat a legközelebbi szomszéd lekérdezésekben használt indexekhez használja. A térbeli indexek tessellációiról további információt Térbeli adatokcímű témakörben talál.
1. példa
Az alábbi példakód egy legközelebbi szomszéd lekérdezést mutat be, amely térbeli indexet használhat. A példa a Person.Address mintaadatbázis AdventureWorks2025 táblát használja.
USE AdventureWorks2022
GO
DECLARE @g geography = 'POINT(-121.626 47.8315)';
SELECT TOP(7) SpatialLocation.ToString(), City FROM Person.Address
WHERE SpatialLocation.STDistance(@g) IS NOT NULL
ORDER BY SpatialLocation.STDistance(@g);
Hozzon létre egy térbeli indexet a SpatialLocation oszlopban annak megtekintéséhez, hogy a legközelebbi szomszéd lekérdezés hogyan használ térbeli indexet. További információ a térbeli indexek létrehozásáról: Térbeli indexek létrehozása, módosítása és elvetése.
2. példa
Az alábbi példakód egy legközelebbi szomszéd lekérdezést mutat be, amely nem tud térbeli indexet használni.
USE AdventureWorks2022
GO
DECLARE @g geography = 'POINT(-121.626 47.8315)';
SELECT TOP(7) SpatialLocation.ToString(), City FROM Person.Address
ORDER BY SpatialLocation.STDistance(@g);
A lekérdezés hiányzik egy WHERE záradék, amely STDistance()-t használ a szintaxis szakaszban megadott formában, ezért a lekérdezés nem tud térbeli indexet használni.