SQL server 2008 R2 veritabanımda aşağıdaki hatayı alıyorum:
Tablo veya dizinlenmiş görünüm 'tblArmy' üzerinde bir
CONTAINS
veyaFREETEXT
yüklem kullanılamaz çünkü tam metin dizinli değildir.
SQL server 2008 R2 veritabanımda aşağıdaki hatayı alıyorum:
Tablo veya dizinlenmiş görünüm 'tblArmy' üzerinde bir
CONTAINS
veyaFREETEXT
yüklem kullanılamaz çünkü tam metin dizinli değildir.
Yanıtlar:
Tam metin arama özelliğinin yüklü olduğundan emin olun.
Tam metin arama kataloğu oluşturun.
use AdventureWorks
create fulltext catalog FullTextCatalog as default
select *
from sys.fulltext_catalogs
Tam metin arama dizini oluşturun.
create fulltext index on Production.ProductDescription(Description)
key index PK_ProductDescription_ProductDescriptionID
Dizini oluşturmadan önce şunlardan emin olun:
- bir tabloda yalnızca bir tam metin arama dizinine izin verildiğinden, tabloda tam metin arama
dizininiz yok - tabloda benzersiz bir dizin var. Dizin, NULL'a izin vermeyen tek anahtarlı sütuna dayanmalıdır.
- tam metin kataloğu mevcuttur. Varsayılan tam metin kataloğu yoksa, tam metin katalog adını açıkça belirtmeniz gerekir.
SQL Sunucu Management Studio'da adım 2 ve 3'ü yapabilirsiniz. Nesne gezgininde, bir tabloya sağ tıklayın, Full-Text index
menü öğesini ve ardından Define Full-Text Index...
alt menü öğesini seçin. Tam Metin indeksleme sihirbazı süreç boyunca size yol gösterecektir. Henüz sahip değilseniz, tam metin arama kataloğu da oluşturacaktır.
MSDN'de daha fazla bilgi bulabilirsiniz
Şunun için bir çözüm CONTAINS
: Sütunda tam metin Dizini oluşturmak istemiyorsanız ve performans önceliklerinizden LIKE
biri değilse, önceden herhangi bir yapılandırmaya ihtiyaç duymayan ifadeyi kullanabilirsiniz :
Örnek: Q harfini içeren tüm Ürünleri bulun:
SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'
Full-Text-Index
Veritabanındaki tüm tablolarda, CONTAINS
bazen sürecek bir sorgu kullanmanız gereken yerlerde tanımlamalısınız .
Bunun yerine LIKE
, tablolar için herhangi bir ayar yapmanıza gerek kalmadan size anında sonuç verecek olanı kullanabilirsiniz .
Misal:
SELECT * FROM ChartOfAccounts WHERE AccountName LIKE '%Tax%'
İle elde edilen aynı sonuç ile elde CONTAINS
edilebilir LIKE
.
Tam metin indeksleme için tabloyu etkinleştirmeniz gerekebilir .
Aramak istediğiniz belirli alanlara tam metin dizini eklemeniz gerekir.
ALTER TABLE news ADD FULLTEXT(headline, story);
"haberler" tablonuzdur ve tam metin araması için etkinleştirmek istemediğiniz "başlık, hikaye" alanları
Sütun Tam metni true olarak ayarlamak için bir çözüm daha var.
Örneğin bu çözüm benim için işe yaramadı
ALTER TABLE news ADD FULLTEXT(headline, story);
Çözümüm.
SONRAKİ ADIMLAR
Yenile
Mssql 2014 sürümü
Select * from table
where CONTAINS([Column], '"A00*"')
% olarak aynı şekilde hareket edecek
where [Column] Like 'A00%'