Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pemroses kueri tidak dapat menghasilkan rencana kueri karena petunjuk yang ditentukan dalam kueri ini. Kirim ulang kueri dan tanpa menggunakan SET FORCEPLAN

Dari di sini :

Persyaratan berikut harus dipenuhi agar kueri Tetangga Terdekat dapat menggunakan indeks spasial:

  1. Indeks spasial harus ada pada salah satu kolom spasial dan metode STDistance() harus menggunakan kolom tersebut dalam klausa WHERE dan ORDERBY.
  2. Klausa TOP tidak boleh berisi pernyataan PERCENT.
  3. Klausa WHERE harus berisi metode STDistance().
  4. Jika ada beberapa predikat dalam klausa WHERE maka predikat yang mengandung metode STDistance() harus dihubungkan dengan konjungsi AND ke predikat lainnya. Metode STDistance() tidak boleh berada di bagian opsional dari klausa WHERE.
  5. Ekspresi pertama dalam klausa ORDER BY harus menggunakan metodeSTDistance().
  6. Urutan urutan untuk ekspresi STDistance() pertama di ORDER BYclause harus ASC.
  7. Semua baris yang mengembalikan NULL STDistance harus difilter.

Jadi, ini seharusnya berhasil:

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

Anda dapat memeriksa apakah itu menggunakan indeks spasial bahkan WITH INDEX petunjuk dihapus.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mencadangkan Sql Database Secara Terprogram di C #

  2. Periksa apakah tabel ada dan jika tidak ada, buat di SQL Server 2008

  3. Menerapkan relasi satu-ke-nol-atau-satu di SQL Server

  4. datetime vs datetime2 di SQL Server:Apa Bedanya?

  5. Bagaimana cara mendapatkan nilai kotak centang dari tampilan kisi saat kotak centang OnCheckedChanged