Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Процесорът на заявка не можа да създаде план за заявка поради подсказките, дефинирани в тази заявка. Изпратете отново заявката и без да използвате SET FORCEPLAN

От тук :

Следните изисквания трябва да бъдат изпълнени, за да може заявка за най-близък съсед да използва пространствен индекс:

  1. Пространственият индекс трябва да присъства в една от пространствените колони и методът STDistance() трябва да използва тази колона в клаузите WHERE и ORDERBY.
  2. Клаузата TOP не може да съдържа израз PERCENT.
  3. Клаузата WHERE трябва да съдържа метод STDistance().
  4. Ако има множество предикати в клаузата WHERE, тогава предикатът, съдържащ метода STDistance(), трябва да бъде свързан чрез връзка И с другите предикати. Методът STDistance() не може да бъде в незадължителна част от клаузата WHERE.
  5. Първият израз в клаузата ORDER BY трябва да използва метода STDistance().
  6. Редът на сортиране за първия израз STDistance() в клаузата ORDER BY трябва да бъде ASC.
  7. Всички редове, за които STDistance връща NULL, трябва да бъдат филтрирани.

И така, това трябва да работи:

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

Можете да проверите дали използва интервалния индекс дори WITH INDEX подсказката е премахната.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Нуждаете се от заявка за свързване на уникален родител с дете, което не е уникално, но може да бъде направено уникално с MAX

  2. ms-access:как да направя правилна повторна заявка?

  3. Изберете Записи няколко пъти от таблицата

  4. Sql Server 2008 географски ограничения за размера на LineString

  5. Архитектура на SQL Server AlwaysOn (група за наличност) и инсталация стъпка по стъпка -3 Ръководство за отказ от стъпки