CONTAINSTABLE(Transact-SQL)

업데이트: 2006년 7월 17일

문자 기반 데이터 형식이 포함된 열에서 특정 단어나 구와 정확히 일치하거나 비슷하게 일치하는 단어를 검색하거나, 서로 근접한 단어 검색, 가중치 검색에서 일치한 0개 이상의 행이 있는 테이블을 반환합니다. CONTAINSTABLE은 일반 테이블 이름처럼 SELECT 문의 FROM 절에서 참조될 수 있습니다.

CONTAINSTABLE을 사용한 쿼리는 각 행에 대해 적절한 등급 값(RANK) 및 전체 텍스트 키(KEY)를 반환하는 contains형 전체 텍스트 쿼리를 지정합니다. CONTAINSTABLE 함수는 CONTAINS 조건자와 동일한 검색 조건을 사용합니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

CONTAINSTABLE ( table , { column_name | (column_list ) | * } , ' < contains_search_condition > ' 
     [ , LANGUAGE language_term] 
  [ ,top_n_by_rank ] 
          ) 
< contains_search_condition > ::= 
    { < simple_term > 
    | < prefix_term > 
    | < generation_term > 
    | < proximity_term > 
     |  < weighted_term > 
    } 
    | { ( < contains_search_condition > ) 
    { { AND | & } | { AND NOT | &! } | { OR | | } } 
     < contains_search_condition > [ ...n ] 
    }
< simple_term > ::= 
          word | " phrase "
< prefix term > ::= 
     { "word * " | "phrase *" } 
< generation_term > ::= 
     FORMSOF ( { INFLECTIONAL | THESAURUS } , < simple_term > [ ,...n ] ) 
< proximity_term > ::= 
     { < simple_term > | < prefix_term > } 
     { { NEAR | ~ } { < simple_term > | < prefix_term > } } [ ...n ] 
< weighted_term > ::= 
     ISABOUT
        ( { { 
  < simple_term > 
  | < prefix_term > 
  | < generation_term > 
  | < proximity_term > 
  } 
   [ WEIGHT ( weight_value ) ] 
   } [ ,...n ] 
        )

인수

  • table
    전체 텍스트 쿼리용으로 표시된 테이블 이름입니다. table은 한 부분, 두 부분, 세 부분 또는 네 부분으로 구성된 데이터베이스 개체 이름일 수 있습니다.
  • column_name
    table의 검색할 열의 이름입니다. char, varchar, nchar, nvarchar, text, ntext, image, xml, binaryvarbinary 유형의 열은 전체 텍스트 검색에 사용할 수 있습니다.
  • column_list
    여러 개의 열을 쉼표로 구분하여 지정할 수 있음을 나타냅니다. column_list는 괄호로 묶어야 합니다. language_term을 지정하지 않을 경우 column_list에 있는 모든 열의 언어가 같아야 합니다.
  • *
    전체 텍스트 검색을 위해 등록된 테이블의 모든 열을 지정한 포함 검색 조건을 검색하는 데 사용하도록 지정합니다. FROM 절에 두 개 이상의 테이블이 있을 경우 테이블 이름에 *를 지정해야 합니다. language_term을 지정하지 않을 경우 테이블에 있는 모든 열의 언어가 같아야 합니다.
  • LANGUAGE language_term
    리소스가 단어 분리, 어간, 사전에 사용되거나 CONTAINS 쿼리의 일부로 의미 없는 단어 제거에 사용되는 언어입니다. 이 매개 변수는 옵션이며 언어의 LCID(로캘 ID)에 해당하는 문자열, 정수 또는 16진수 값으로 지정될 수 있습니다. language_term을 지정할 경우 해당 언어는 검색 조건의 모든 요소에 적용됩니다. 값이 지정되지 않은 경우 전체 텍스트 언어 열이 사용됩니다.

    문자열로 지정하는 경우 language_termsyslanguages 시스템 테이블의 alias 열 값에 해당합니다. 문자열은 'language_term'과 같이 작은따옴표로 묶어야 합니다. 정수로 지정하는 경우 language_term은 언어를 식별하는 실제 LCID입니다. 16진수 값으로 지정하는 경우 language_term은 0x로 시작하는 LCID의 16진수 값입니다. 16진수 값은 선행 0을 포함하여 8자리 수를 초과할 수 없습니다.

    값이 DBCS(더블바이트 문자 집합) 형식인 경우 Microsoft SQL Server는 값을 유니코드로 변환합니다.

    지정된 언어가 잘못되었거나 해당 언어에 해당하는 리소스가 설치되지 않은 경우 SQL Server는 오류를 반환합니다. 언어 중립적인 리소스를 사용하려면 language_term을 0x0으로 지정하십시오.

  • top_n_by_rank
    내림차순으로 최고 등급 n개의 일치만 반환되도록 지정합니다. 정수 값 n이 지정된 경우에만 적용됩니다. 추가 필터링을 수행하면 n개 미만의 결과가 반환될 수 있습니다.
  • <contains_search_condition>
    column_name에서 검색할 텍스트와 일치 조건을 지정합니다. 자세한 내용은 CONTAINS(Transact-SQL)를 참조하십시오.

주의

반환된 테이블에는 전체 텍스트 키 값이 포함된 KEY 열이 있으며 전체 텍스트 인덱싱된 테이블에는 고유한 값을 갖는 열이 있으며 KEY 열에 반환된 값은 포함 검색 조건에 지정된 선택 조건과 일치하는 행의 전체 텍스트 키 값입니다. OBJECTPROPERTYEX 함수에서 얻을 수 있는 TableFulltextKeyColumn 속성은 이러한 고유 키 열의 ID를 제공합니다. 전체 텍스트 인덱스의 전체 텍스트 키와 연결된 열의 ID를 얻으려면 sys.fulltext_indexes를 사용합니다. 자세한 내용은 sys.fulltext_indexes(Transact-SQL)를 참조하십시오.

원래 테이블에서 원하는 행을 얻으려면 CONTAINSTABLE 행과 조인을 지정합니다. 일반적인 SELECT 문의 FROM 절에서 CONTAINSTABLE을 사용한 예는 다음과 같습니다.

SELECT select_list
FROM table AS FT_TBL INNER JOIN
   CONTAINSTABLE(table, column, contains_search_condition) AS KEY_TBL
   ON FT_TBL.unique_key_column = KEY_TBL.[KEY]

CONTAINSTABLE 에서 생성된 테이블에는 RANK라는 열이 포함됩니다. RANK 열(0에서 1000 사이)의 값은 각 행이 선택 조건과 일치하는 정도를 나타냅니다. 이러한 등급 값은 대개 SELECT 문에서 다음과 같이 사용됩니다.

  • ORDER BY 절에서 등급 값이 가장 높은 행을 테이블의 첫 번째 행으로 반환합니다.
  • 선택 목록에서 각 행에 할당된 등급 값을 봅니다.

호환성 수준이 70 미만일 경우 CONTAINSTABLE은 키워드로 인식되지 않습니다. 자세한 내용은 sp_dbcmptlevel(Transact-SQL)을 참조하십시오.

사용 권한

테이블이나 참조되는 테이블의 열에 대해 SELECT 권한이 있는 사용자만 실행 권한이 있습니다.

1. CONTAINSTABLE을 사용하여 등급 값 반환

다음 예에서는 breads, fish, beers 단어가 포함된 모든 제품 이름을 검색하며 각 단어에는 다른 가중치가 지정됩니다. 선택 조건과 일치하여 반환된 각 행에 대해 상대적인 일치 정도(등급 값)가 표시되며 등급 값이 가장 높은 행이 제일 먼저 반환됩니다.

[!참고] 이 예를 실행하려면 Northwind 데이터베이스를 설치해야 합니다. Northwind 데이터베이스 설치 방법은 Northwind 및 pubs 예제 데이터베이스 다운로드를 참조하십시오.

USE Northwind;
GO
SELECT FT_TBL.CategoryName, FT_TBL.Description, KEY_TBL.RANK
    FROM Categories AS FT_TBL 
        INNER JOIN CONTAINSTABLE(Categories, Description, 
        'ISABOUT (breads weight (.8), 
        fish weight (.4), beers weight (.2) )' ) AS KEY_TBL
            ON FT_TBL.CategoryID = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC;
GO

2. CONTAINSTABLE을 사용하여 지정된 값보다 큰 등급 값 반환

다음 예에서는 Description 열에 saucescandies와 근접한 "sweet and savory" 단어가 포함된 모든 식품 범주 이름과 설명을 반환합니다. 범주 이름이 Seafood인 행은 모두 제외되며 등급 값이 2 이상인 행만 반환됩니다.

[!참고] 이 예를 실행하려면 Northwind 데이터베이스를 설치해야 합니다. Northwind 데이터베이스 설치 방법은 Northwind 및 pubs 예제 데이터베이스 다운로드를 참조하십시오.

USE Northwind;
GO
SELECT FT_TBL.Description, FT_TBL.CategoryName, KEY_TBL.RANK
FROM Categories AS FT_TBL 
    INNER JOIN CONTAINSTABLE (Categories, Description, 
        '("sweet and savory" NEAR sauces) OR
        ("sweet and savory" NEAR candies)'
        ) AS KEY_TBL
        ON FT_TBL.CategoryID = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK > 2
    AND FT_TBL.CategoryName <> 'Seafood'
ORDER BY KEY_TBL.RANK DESC;
GO

3. CONTAINSTABLE 및 top_n_by_rank를 사용하여 상위 10개 등급의 결과 반환

다음 예에서는 Description 열에 "sauces"나 "candies"와 근접한 "sweet and savory" 단어가 포함된 상위 10개의 식품 범주 이름과 설명을 반환합니다.

[!참고] 이 예를 실행하려면 Northwind 데이터베이스를 설치해야 합니다. Northwind 데이터베이스 설치 방법은 Northwind 및 pubs 예제 데이터베이스 다운로드를 참조하십시오.

USE Northwind;
SELECT FT_TBL.Description, FT_TBL.CategoryName , KEY_TBL.RANK
FROM Categories AS FT_TBL 
    INNER JOIN CONTAINSTABLE (Categories, Description, 
        '("sweet and savory" NEAR sauces) OR
        ("sweet and savory" NEAR candies)', 10)
        AS KEY_TBL
        ON FT_TBL.CategoryID = KEY_TBL.[KEY]

GO

4. LANGUAGE 인수 지정

다음 예에서는 LANGUAGE 인수를 사용하는 방법을 보여 줍니다.

USE Northwind;

SELECT FT_TBL.Description , FT_TBL.CategoryName , KEY_TBL.RANK

FROM dbo.Categories AS FT_TBL

INNER JOIN CONTAINSTABLE (dbo.Categories, Description,

'("sweet and savory" NEAR sauces) OR

("sweet and savory" NEAR candies)',LANGUAGE N'English', 10)

AS KEY_TBL

ON FT_TBL.CategoryID = KEY_TBL.[KEY];

[!참고] LANGUAGE language_term 인수는top_n_by_rank를 사용하는 데 필요하지 않습니다.

참고 항목

참조

CONTAINS(Transact-SQL)
행 집합 함수(Transact-SQL)
SELECT(Transact-SQL)
WHERE(Transact-SQL)

관련 자료

전체 텍스트 검색을 사용하여 SQL Server 쿼리

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2006년 7월 17일

새로운 내용
  • LANGUAGE 인수에 대한 예를 추가했습니다.