programing

전체 텍스트 인덱싱이 아니므로 테이블 또는 인덱싱 된 뷰에서 CONTAINS 또는 FREETEXT 조건자를 사용할 수 없습니다.

nasanasas 2020. 10. 18. 18:20
반응형

전체 텍스트 인덱싱이 아니므로 테이블 또는 인덱싱 된 뷰에서 CONTAINS 또는 FREETEXT 조건자를 사용할 수 없습니다.


SQL Server 2008 R2 데이터베이스에서 다음 오류가 발생합니다.

전체 텍스트 인덱싱이 아니기 때문에 테이블 또는 인덱싱 된 뷰 'tblArmy' 에서 CONTAINS또는 FREETEXT조건자를 사용할 수 없습니다 .


  1. 전체 텍스트 검색 기능이 설치되어 있는지 확인하십시오.

    전체 텍스트 검색 설정

  2. 전체 텍스트 검색 카탈로그를 만듭니다.

     use AdventureWorks
     create fulltext catalog FullTextCatalog as default
    
     select *
     from sys.fulltext_catalogs
    
  3. 전체 텍스트 검색 색인을 만듭니다.

     create fulltext index on Production.ProductDescription(Description)
     key index PK_ProductDescription_ProductDescriptionID
    

    인덱스를 생성하기 전에 다음 사항을 확인하십시오
    .-테이블에 하나의 전체 텍스트 검색 인덱스 만 허용되므로 테이블에 대한 전체 텍스트 검색 인덱스가 없는지 확인하십시오. 테이블
    에 고유 인덱스가 있습니다. 인덱스는 NULL을 허용하지 않는 단일 키 열을 기반으로해야합니다.
    -전체 텍스트 카탈로그가 있습니다. 기본 전체 텍스트 카탈로그가없는 경우 전체 텍스트 카탈로그 이름을 명시 적으로 지정해야합니다.

SQL Sever Management Studio에서 2 단계와 3 단계를 수행 할 수 있습니다. 개체 탐색기에서 테이블을 마우스 오른쪽 버튼으로 클릭하고 Full-Text index메뉴 항목을 선택한 다음 Define Full-Text Index...하위 메뉴 항목을 선택 합니다 . 전체 텍스트 인덱싱 마법사가 프로세스를 안내합니다. 아직없는 경우 전체 텍스트 검색 카탈로그도 생성됩니다.

여기에 이미지 설명 입력

MSDN 에서 자세한 정보를 찾을 수 있습니다.


에 대한 해결 방법 CONTAINS: 열에 전체 텍스트 인덱스를 만들고 싶지 않고 성능이 우선 순위 중 하나 LIKE가 아닌 경우 이전 구성이 필요하지 않은 문을 사용할 수 있습니다 .

예 : 문자 Q가 포함 된 모든 제품 찾기 :

SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'

시간 이 걸리는 Full-Text-Index쿼리를 사용해야하는 데이터베이스의 모든 테이블에서 정의해야합니다 CONTAINS.

대신 LIKE테이블에 대한 설정을 조정할 필요없이 즉시 결과를 제공 하는 사용할 수 있습니다 .

예:

SELECT * FROM ChartOfAccounts WHERE AccountName LIKE '%Tax%'

에서 얻은 동일한 결과를에서 얻을 CONTAINS수 있습니다 LIKE.

결과보기 : 여기에 이미지 설명 입력


전체 텍스트 인덱싱을 위해 테이블활성화 해야 할 수도 있습니다 .


검색하려는 특정 필드에 전체 텍스트 색인을 추가해야합니다.

ALTER TABLE news ADD FULLTEXT(headline, story);

여기서 "news"는 전체 텍스트 검색에 사용할 수없는 테이블 및 "headline, story"필드입니다.


전체 텍스트 열을 true로 설정하는 솔루션이 하나 더 있습니다.

예를 들어 이러한 솔루션은 저에게 효과적이지 않았습니다.

ALTER TABLE news ADD FULLTEXT(headline, story);

내 솔루션.

  1. 테이블을 마우스 오른쪽 버튼으로 클릭
  2. 디자인
  3. 편집하려는 열을 마우스 오른쪽 버튼으로 클릭하십시오.
  4. 전체 텍스트 색인
  5. 더하다
  6. 닫기
  7. 새롭게 하다

다음 단계

  1. 테이블을 마우스 오른쪽 버튼으로 클릭
  2. 디자인
  3. 편집하려는 열을 클릭하십시오.
  4. mssql 하단에 "열 속성"탭이 있습니다.
  5. 전체 텍스트 사양-> (전체 텍스트 인덱싱 됨)이 true로 설정되었습니다.

새롭게 하다

mssql 2014 버전


Select * from table
where CONTAINS([Column], '"A00*"')  

%와 동일하게 작동합니다.

where [Column] Like 'A00%'

참고 URL : https://stackoverflow.com/questions/6003240/cannot-use-a-contains-or-freetext-predicate-on-table-or-indexed-view-because-it

반응형