sql >> Database teknologi >  >> RDS >> Sqlserver

Forespørgselsprocessor kunne ikke producere en forespørgselsplan på grund af de tip, der er defineret i denne forespørgsel. Genindsend forespørgslen uden at bruge SET FORCEPLAN

Fra her :

Følgende krav skal være opfyldt, for at en Nearest Neighbor-forespørgsel kan bruge et rumligt indeks:

  1. Et rumligt indeks skal være til stede på en af ​​de rumlige kolonner, og STDistance()-metoden skal bruge denne kolonne i WHERE- og ORDERBY-sætningerne.
  2. TOP-sætningen kan ikke indeholde en PERCENT-sætning.
  3. WHERE-udtrykket skal indeholde en STDistance()-metode.
  4. Hvis der er flere prædikater i WHERE-sætningen, skal prædikatet, der indeholder STDistance()-metoden, forbindes med en AND-konjunktion til de andre prædikater. STDistance()-metoden kan ikke være i en valgfri del af WHERE-sætningen.
  5. Det første udtryk i ORDER BY-udtrykket skal bruge metoden STDistance().
  6. Sorteringsrækkefølgen for det første STDistance()-udtryk i ORDER BY-sætningen skal være ASC.
  7. Alle de rækker, som STDistance returnerer NULL for, skal filtreres fra.

Så dette burde virke:

DECLARE @g geography;
declare @point nvarchar(50)  =''
declare @i int =0,
        @lat decimal(8,6) =0.0,
        @long decimal(8,6) =0.0,
        @start datetime = getdate()
set @lat =(select (0.9 -Rand()*1.8)*100)
set @long =(select (0.9 -Rand()*1.8)*100)
set @point = (select 'POINT('+CONVERT(varchar(10), @lat)+ '  ' 
             +CONVERT(varchar(10), @long)+')')
SET @g = geography::STGeomFromText(@point, 4326);

SELECT TOP 1000
    @lat,
    @long,
        @g.STDistance(st.[coord]) AS [DistanceFromPoint (in meters)] 
    ,   st.[coord]
    ,   st.id
FROM    Temp st with(index([SpatialIndex_1]))
WHERE @g.STDistance(st.[coord])  IS NOT NULL
ORDER BY @g.STDistance(st.[coord]) asc

Du kan kontrollere, at den bruger det rumlige indeks, selv WITH INDEX tip er fjernet.



  1. Hvordan kan jeg få adgang til en postgresql-database fra Matlab med uden Matlabs-databaseværktøjskasse?

  2. Sådan ændres serverniveausortering af kørende SQL Server-instans

  3. en artikel om flere kategorier

  4. Parse fejl:syntaks fejl, uventet '=' fejl