CONTAINSTABLE (Transact-SQL)

Zwraca tabela zero, jeden lub więcej wierszy dla tych kolumn zawierające typy danych znakowych na dokładne lub niewyraźny odpowiedników (mniej dokładne) do pojedynczych wyrazów i fraz, bliskość wyrazy w pewnej odległości od siebie lub ważona dopasowania.CONTAINSTABLE można się odwoływać tylko w klauzula FROM instrukcja SELECT, tak jakby był on nazwy tabela regularnych.

Kwerendy przy użyciu CONTAINSTABLE umożliwia określenie typu zawiera pełnego tekstu kwerendy, które zwracają znaczenia, klasyfikacja wartość (pozycja) i pełnego tekstu klucz (KEY) dla każdego wiersza.Funkcja CONTAINSTABLE używa tych samych warunkach wyszukiwania jako predykat CONTAINS.

Topic link iconKonwencje składni języka 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 ] 
        )

Argumenty

  • table
    Is the name of a table that has been full-text indexed.table can be a one-, two-, three-, or four-part database object name.Wykonywanie kwerendy w widoku, mogą uczestniczyć tylko jednego pełnego tekstu indeksowanej tabela bazowa.

    table Nie można określić nazwa serwera i nie może być używany w kwerendach serwery połączone.

  • column_name
    Czy wyszukiwanie nazw z jedną lub więcej kolumn, które są indeksowane dla całego tekstu.Kolumny może być typu char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, lub varbinary(max).

  • column_list
    Indicates that several columns, separated by a comma, can be specified.column_list must be enclosed in parentheses.Chyba że language_term jest określony język wszystkie kolumny column_list musi być taka sama.

  • *
    Określa, że wszystkie pełnego tekstu indeksowana kolumn table należy używać do wyszukiwania warunek wyszukiwania danej. Chyba że language_term jest określony, język wszystkich kolumn w tabela muszą być takie same.

  • LANGUAGE language_term
    To język, w których zasobów będzie używany do dzielenia wyrazów, mapowanie rdzeni i tezaurusa i wyraz pomijalny (lub stopword) Usuwanie jako część tej kwerendy.Ten parametr jest opcjonalny i może być określona jako ciąg znaków, liczba całkowita lub wartość szesnastkową odpowiadającą identyfikator regionalny (LCID) języka.Jeśli language_term jest określony, język reprezentuje zostaną zastosowane do wszystkich elementów tego warunek wyszukiwania. Jeśli nie określono wartości, używany jest język pełnego tekstu kolumna.

    Jeśli dokumenty w różnych językach są przechowywane razem jako binarne dużych obiektów (bloków BLOB) w jednej kolumnie, identyfikator regionalny (LCID) danego dokumentu określa, jaki język jest używany do indeksowania zawartości.When querying such a column, specifying LANGUAGElanguage_term can increase the probability of a good match.

    Jeśli określona jako ciąg znaków, language_term odpowiada alias wartość kolumna sys.syslanguages zgodności widoku.Ciąg musi być ujęty w pojedynczy cudzysłów, tak jak "language_term". Po określeniu jako liczbę całkowitą z zakresu language_term to rzeczywiste LCID identyfikujący języka. Gdy określany jako wartość szesnastkowa language_term 0 x następuje szesnastkowej wartości LCID. Wartość szesnastkowa nie może przekraczać ośmiu cyfr, łącznie z zerami na początku.

    If the value is in double-byte character set (DBCS) format, Microsoft SQL Server will convert it to Unicode.

    Jeśli określony język nie jest prawidłowy lub nie istnieje żadne zasoby nie zainstalowano odpowiadające dla danego języka SQL Server Zwraca błąd. Aby można było korzystać z zasobów języków neutralnych, określić 0x0 jako language_term.

  • top_n_by_rank
    Specifies that only the nhighest ranked matches, in descending order, are returned.Ma zastosowanie tylko wtedy, gdy wartością całkowitą n, jest określona.If top_n_by_rank is combined with other parameters, the query could return fewer rows than the number of rows that actually match all the predicates.top_n_by_rank allows you to increase query performance by recalling only the most relevant hits.

  • <contains_search_condition>
    Kiedy column_name ma wartość NULL, nazwę arkusza, który nie ulega zmianie. Aby uzyskać informacje na temat warunków wyszukiwania zobacz CONTAINS (Transact-SQL).

Remarks

Predykaty pełnego tekstu, a funkcje pracy na pojedynczej tabela, która jest podany w predykacie FROM.Aby wyszukać wielu tabel, należy użyć sprzężonej tabela w klauzula FROM do wyszukiwania zestaw wyników, który to iloczyn dwóch lub większej liczby tabel.

Zwracany w tabela zawiera kolumna o nazwie KLUCZ zawierający wartości klucza pełnego tekstu.Każda tabela indeksowanych pełnego tekstu zawiera kolumna, których wartości są gwarantowane jest unikatowy i wartości zwracane w KLUCZ kolumn są wartości klucza pełnotekstowego wierszy spełniających kryteria określone w zawiera warunek wyszukiwania.The TableFulltextKeyColumn właściwość, obtained from the OBJECTPROPERTYEX funkcja, provides the identity of this unique klucz kolumna.Aby uzyskać identyfikator skojarzony z kluczem pełnotekstowego indeksu pełnotekstowego kolumna, należy użyć sys.fulltext_indexes.Aby uzyskać więcej informacji zobaczsys.fulltext_indexes (Transact-SQL).

Wiersze, które mają otrzymać z tabela pierwotnej, należy określić łączyć CONTAINSTABLE wierszy.Typowy formularz klauzula FROM instrukcja SELECT za pomocą CONTAINSTABLE jest:

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]

W tabela wyprodukowane przez CONTAINSTABLE zawiera kolumna o nazwie POZYCJA.The RANK kolumna is a value (from 0 through 1000) for each row indicating how well a row matched the selection criteria.Wartość ta pozycja jest przeważnie stosowane w jeden z następujących sposobów, w instrukcja SELECT:

  • W klauzula ORDER BY zwrócić highest-ranking wierszy jako pierwsze wiersze w tabela.

  • Na liście select w celu wyświetlenia rangi wartość przypisana do każdego wiersza.

Jeśli poziom zgodności jest mniejsza niż 70 CONTAINSTABLE nie został rozpoznany jako słowo kluczowe.Aby uzyskać więcej informacji zobaczsp_dbcmptlevel (języka Transact-SQL).

Uprawnienia

wykonać uprawnienia są dostępne tylko przez użytkowników z odpowiednimi przywilejami SELECT na tabela lub kolumny tabela do którego istnieje odwołanie.

Przykłady

A.Zwracanie wartości rangi przy użyciu CONTAINSTABLE

Następujący przykład wyszukuje wszystkie nazwy produktów zawierających breads wyrazy, ryby lub piwa i różnych wag są podane dla każdego wyrazu.Dla każdego wiersza zwracana spełniających te kryteria wyszukiwania jest wyświetlane względne bliskość (wartość klasyfikacji) pasuje.Ponadto najwyższym wierszy klasyfikacji zwracane są najpierw.

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

B.Zwracanie wartości pozycja większa niż wartość określona za pomocą CONTAINSTABLE

W poniższym przykładzie zwraca opis i kategorii nazwę wszystkie kategorie żywności, dla których Description kolumna zawiera wyrazy "sweet and savory" w pobliżu albo wyraz sauces lub wyraz candies. Wszystkie wiersze, które mają nazwy kategorii Seafood są pomijane. Tylko wiersze z wartością rangi 2 lub wyższym są zwracane.

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

C.Zwracanie górne 10 USZEREGOWANY wyniki za pomocą CONTAINSTABLE i top_n_by_rank

W poniższym przykładzie zwraca nazwę opis i kategoria kategorie żywności 10 najlepszych gdzie Descriptionkolumna zawiera wyrazy "słodka i savory" u "sosy" lub "candies".

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

D.Określając LANGUAGE argument

W poniższym przykładzie pokazano, za pomocą LANGUAGE argument.

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];

Uwaga

JĘZYK language_term argumentnie jest wymagana do używania top_n_by_rank.