Menggunakan CONTAINS pada tampilan di SQL Server 2008 R2

Saya telah mendefinisikan indeks teks lengkap pada tabel, sehingga kueri berikut berfungsi dengan baik:

SELECT Field FROM MyTable WHERE CONTAINS(Field, 'text') 

Selain itu, terdapat tampilan warisan pada tabel, sebagai berikut:

CREATE VIEW MyView AS SELECT * FROM MyTable

Apakah mungkin menjalankan kueri terhadap tampilan, bukan membuatnya kembali seperti yang diindeks?

SELECT Field FROM MyView WHERE CONTAINS(Field, 'text') 

Saya mendapatkan Cannot use a CONTAINS or FREETEXT predicate on table or indexed view 'MyView' because it is not full-text indexed, yang tampaknya aneh bagi saya, karena ini menggagalkan tujuan tampilan abstraksi kueri dan juga bukan cara kerja indeks biasa.


person Herman Kan    schedule 27.04.2017    source sumber


Jawaban (2)


Membuat indeks teks lengkap pada tabel atau tampilan terindeks dalam database di SQL Server. Hanya satu indeks teks lengkap yang diperbolehkan per tabel atau tampilan yang diindeks, dan setiap indeks teks lengkap berlaku untuk satu tabel atau tampilan yang diindeks.

tautan di bawah ini akan sangat membantu. https://docs.microsoft.com/en-us/sql/t-sql/statements/create-fulltext-index-transact-sql

person Vivek    schedule 27.04.2017
comment
Anda melewatkan intinya. Saya memang membuat FTI pada sebuah tabel, namun masalahnya adalah FTI tersebut tidak berlaku ketika saya menanyakan tampilan tabel itu. - person Herman Kan; 27.04.2017

CREATE VIEW MyView AS SELECT * FROM MyTable

SELECT Field FROM MyView WHERE CONTAINS(Field, 'text') 

Cara :

SELECT Field FROM (SELECT * FROM MyTable) WHERE CONTAINS(Field, 'text') 

"SELECT * FROM MyTable" akan dievaluasi terlebih dahulu dan digunakan TANPA indeks apa pun dengan permintaan utama... Ini tidak dapat berfungsi "apa adanya".

Anda harus mempertimbangkan untuk menggunakan prosedur tersimpan yang mengembalikan kumpulan catatan yang diinginkan (melewati filter sebagai argumen).

Catatan : Tampilan dapat memanggil prosedur penyimpanan dengan menggunakan perintah openquery atau openrowset.

person Stéphane CLEMENT    schedule 27.04.2017
comment
Ya, tersangka utama saya adalah tampilan diselesaikan ke subkueri, namun berdasarkan contoh, menurut saya ini hanya memperluas tampilan sebaris: SELECT Field FROM MyTable.... - person Herman Kan; 28.04.2017