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


96

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

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


1
실제로 전체 텍스트 카탈로그를 만들었습니까?
Alex K.

답변:


112
  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 에서 자세한 정보를 찾을 수 있습니다.


좋은 정보 Alex! 참고 : Azure SQL을 사용하는 경우 현재 포함 테이블을 지원하지 않습니다. 여기를 참조하십시오 : msdn.microsoft.com/library/azure/ee336253.aspx
Termato 2007

또한 SQL Express 고급 서비스를 사용하는 경우 여기를 참조하여 전체 텍스트 인덱스를 만드십시오. stackoverflow.com/questions/10407337/…
Termato

70

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

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

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

1
링크 . LIKE Transact-SQL 조건자는 문자 패턴에서만 작동합니다. 또한 LIKE 술어를 사용하여 형식화 된 2 진 데이터를 쿼리 할 수 ​​없습니다. 또한 대량의 비정형 텍스트 데이터에 대한 LIKE 쿼리는 동일한 데이터에 대한 동등한 전체 텍스트 쿼리보다 훨씬 느립니다.
Manolis 2013 년

2
아, 달콤합니다 ... 설치 프로그램을 파헤 치고 환경 설정을 엉망으로 만들 필요가없는 쉽고 둥근 방법입니다. 잘 했어!
Christine

21

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

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

예:

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

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

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


그건 정말 영리
WonderWorker

6
이것은 좋은 속임수이지만이 답변의 표현 방식은 잘못되었습니다. "그냥 사용"하지 마십시오. 이를 수행하는 데는 몇 가지 심각한 성능 영향이 있으며이를 프로덕션 시스템에 적용하는 사람은 인덱싱되지 않은 열에서 이와 같은 전체 테이블 스캔을 수행하는 것에 대해 매우 신중하게 생각해야합니다.
caesay

3

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


전체 텍스트 검색 활성화 / 비활성화 컨텍스트 메뉴에서 회색으로 표시됩니다. 전체 텍스트 검색을 설치해야합니다. 전체 텍스트 검색은 어떻게 설치합니까?
DotnetSparrow

SQL Server 용 설치를 실행하면 설치된 구성 요소 (또는 유사한 항목)를 변경하는 옵션이 있어야합니다. 그것을 클릭 한 다음 적절한 시간에 전체 텍스트 확인란을 선택하면 좋습니다. 죄송합니다. 편리한 도구가 없거나 더 구체적인 지침을 제공하겠습니다.
Tom H

@Hi Tom : SQL Server 2008 R2 설치 프로그램을 실행할 때 기능을 추가하는 옵션이 표시되지 않았습니다.
DotnetSparrow

1

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

ALTER TABLE news ADD FULLTEXT(headline, story);

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


1

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

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

ALTER TABLE news ADD FULLTEXT(headline, story);

내 솔루션.

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

다음 단계

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

새롭게 하다

mssql 2014 버전


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

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

where [Column] Like 'A00%'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.