Ereignisse
31. März, 23 Uhr - 2. Apr., 23 Uhr
Das größte SQL-, Fabric- und Power BI-Lernereignis. 31. März – 2. April. Verwenden Sie Code FABINSIDER, um $400 zu sparen.
Jetzt registrierenDieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge durch, um die neuesten Features, Sicherheitsupdates und den technischen Support zu nutzen.
Gilt für: SQL Server
Azure SQL-Datenbank
Azure SQL verwaltete Instanz
SQL Analytics-Endpunkt in Microsoft Fabric
Warehouse in Microsoft Fabric
SQL-Datenbank in Microsoft Fabric SQL in Microsoft Fabric
Eine allgemeine Abfrage, die mit räumlichen Daten verwendet wird, ist die nächste Benachbarte Abfrage. Nächste Benachbarte Abfragen werden verwendet, um die nächstgelegenen räumlichen Objekte zu einem bestimmten räumlichen Objekt zu finden. Beispielsweise muss ein Store-Locator für eine Website häufig die nächstgelegenen Speicherorte an einem Kundenstandort finden.
Eine nächste Nachbarabfrage kann in verschiedenen gültigen Abfrageformaten geschrieben werden, aber für die nächste Nachbarabfrage muss die folgende Syntax verwendet werden, um einen räumlichen Index zu verwenden.
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 ]
[ ; ]
In SQL Server werden Klauseln ORDER BY
verwendet, TOP
um eine nächste Benachbarte Abfrage für räumliche Datenspalten auszuführen. Die ORDER BY
-Klausel enthält einen Aufruf der STDistance()
-Methode für den Typ der Spalte mit räumlichen Daten. Die TOP
-Klausel gibt die für die Abfrage zurückzugebende Anzahl von Objekten an.
Für eine nächste Nachbarabfrage müssen die folgenden Anforderungen erfüllt sein, um einen räumlichen Index zu verwenden:
Ein räumlicher Index muss in einer der räumlichen Spalten vorhanden sein, und die STDistance()
-Methode muss diese Spalte in der WHERE
-Klausel und der ORDER BY
-Klausel verwenden.
Die TOP
-Klausel darf keine PERCENT
-Anweisung enthalten.
Die WHERE
-Klausel muss eine STDistance()
-Methode enthalten.
Wenn in der WHERE
-Klausel mehrere Prädikate vorhanden sind, muss das Prädikat mit der STDistance()
-Methode über eine AND
-Konjunktion mit den anderen Prädikaten verbunden werden. Die STDistance()
-Methode darf sich nicht in einem optionalen Teil der WHERE
-Klausel befinden.
Der erste Ausdruck in der ORDER BY
-Klausel muss die STDistance()
-Methode verwenden.
Die Sortierreihenfolge für den ersten STDistance()
-Ausdruck in der ORDER BY
-Klausel muss auf ASC
festgelegt sein.
Alle Zeilen, für die STDistance
den Wert NULL
zurückgibt, müssen herausgefiltert werden.
Warnung
Methoden, die Geografie- oder Geometriedatentypen als Argumente verwenden, werden zurückgegebenNULL
, wenn die SRIDs für die Typen nicht identisch sind.
Es wird empfohlen, die neuen räumlichen Index-Tessellationen für Indizes zu verwenden, die in nächstgelegenen Benachbarten Abfragen verwendet werden. Weitere Informationen zu räumlichen Index-Tessellationen finden Sie unter Spatial Data.
Das folgende Codebeispiel zeigt eine nächste Nachbarabfrage, die einen räumlichen Index verwenden kann. In diesem Beispiel wird die Person.Address
-Tabelle der AdventureWorks2022
-Beispieldatenbank verwendet.
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);
Erstellen Sie einen räumlichen Index für die Spalte SpatialLocation, um zu sehen, wie eine nächste Nachbarabfrage einen räumlichen Index verwendet. Weitere Informationen zum Erstellen von räumlichen Indizes finden Sie unter Create, Modify, and Drop Spatial Indexes.
Das folgende Codebeispiel zeigt eine nächste Nachbarabfrage, die keinen räumlichen Index verwenden kann.
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);
In der Abfrage fehlt eine WHERE
-Klausel, die STDistance()
in einem im Syntaxabschnitt angegebenen Format verwendet, sodass die Abfrage keine räumlichen Indizes verwenden kann.
Ereignisse
31. März, 23 Uhr - 2. Apr., 23 Uhr
Das größte SQL-, Fabric- und Power BI-Lernereignis. 31. März – 2. April. Verwenden Sie Code FABINSIDER, um $400 zu sparen.
Jetzt registrierenTraining
Lernpfad
Erste Schritte mit Abfragen mit Transact-SQL - Training
Erste Schritte mit Abfragen mit Transact-SQL