CONTAINSTABLE (Transact-SQL)CONTAINSTABLE (Transact-SQL)

SE APLICA A: síSQL Server (a partir de 2008) síAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Devuelve una tabla con una o más filas para aquellas columnas que contengan coincidencias exactas o aproximadas (menos precisas) con palabras simples o frases, palabras próximas a otra dada (dentro de una cierta distancia) o bien coincidencias ponderadas.Returns a table of zero, one, or more rows for those columns containing precise or fuzzy (less precise) matches to single words and phrases, the proximity of words within a certain distance of one another, or weighted matches. Se usa CONTAINSTABLE en la cláusula FROM de un Transact-SQLTransact-SQL instrucción SELECT y se hace referencia como si fuese un nombre de tabla normal.CONTAINSTABLE is used in the FROM clause of a Transact-SQLTransact-SQL SELECT statement and is referenced as if it were a regular table name. Realiza una búsqueda de texto completo en SQL ServerSQL Server en las columnas indizadas de texto completo que contienen tipos de datos basados en caracteres.It performs a SQL ServerSQL Server full-text search on full-text indexed columns containing character-based data types.

CONTAINSTABLE es útil para los mismos tipos de coincidencias que el predicado CONTAINS y utiliza las mismas condiciones de búsqueda que CONTAINS.CONTAINSTABLE is useful for the same kinds of matches as the CONTAINS predicate and uses the same search conditions as CONTAINS.

A diferencia de CONTAINS, las consultas que usan CONTAINSTABLE devuelven un valor de clasificación por relevancia (RANK) y un valor de clave de texto completo (KEY) por cada fila.Unlike CONTAINS, however, queries using CONTAINSTABLE return a relevance ranking value (RANK) and full-text key (KEY) for each row. Para obtener información sobre las formas de búsqueda de texto completo que se admiten en SQL ServerSQL Server, vea Consulta con búsqueda de texto completo.For information about the forms of full-text searches that are supported by SQL ServerSQL Server, see Query with Full-Text Search.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

  
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>   
    | <generic_proximity_term>   
    | <custom_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 ] )   
  
<generic_proximity_term> ::=   
     { <simple_term> | <prefix_term> } { { { NEAR | ~ }   
     { <simple_term> | <prefix_term> } } [ ...n ] }  
  
<custom_proximity_term> ::=   
  NEAR (   
     {  
        { <simple_term> | <prefix_term> } [ ,...n ]  
     |  
        ( { <simple_term> | <prefix_term> } [ ,...n ] )   
      [, <maximum_distance> [, <match_order> ] ]  
     }  
       )   
  
      <maximum_distance> ::= { integer | MAX }  
      <match_order> ::= { TRUE | FALSE }   
  
<weighted_term> ::=   
     ISABOUT  
    ( { {   
  <simple_term>   
  | <prefix_term>   
  | <generation_term>   
  | <proximity_term>   
  }   
   [ WEIGHT ( weight_value ) ]   
   } [ ,...n ]   
    )  
  

ArgumentosArguments

tabletable
Es el nombre de una tabla que se ha sometido a una indización de texto completo.Is the name of a table that has been full-text indexed. tabla puede ser un uno, dos, tres o nombre de objeto de cuatro partes de la base de datos.table can be a one-, two-, three-, or four-part database object name. Al consultar una vista, puede incluirse solo una tabla base indizada de texto completo.When querying a view, only one full-text indexed base table can be involved.

tabla no se puede especificar un nombre de servidor y no se puede usar en consultas en servidores vinculados.table cannot specify a server name and cannot be used in queries against linked servers.

column_namecolumn_name
Es el nombre de una o más columnas indizadas para la búsqueda de texto completo.Is the name of one or more columns that are indexed for full-text searching. Las columnas pueden ser de tipo char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary o varbinary(max).The columns can be of type char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, or varbinary(max).

column_listcolumn_list
Indica que se pueden especificar varias columnas, separadas por una coma.Indicates that several columns, separated by a comma, can be specified. column_list debe ir entre paréntesis.column_list must be enclosed in parentheses. A menos que se especifique language_term, el idioma de todas las columnas de column_list debe ser el mismo.Unless language_term is specified, the language of all columns of column_list must be the same.

*
Especifica que todos los indexa por completo las columnas de tabla debe usarse para buscar la condición de búsqueda especificada.Specifies that all full-text indexed columns in table should be used to search for the given search condition. A menos que se especifique language_term, el idioma de todas las columnas de la tabla debe ser el mismo.Unless language_term is specified, the language of all columns of the table must be the same.

LANGUAGE language_termLANGUAGE language_term
Es el idioma cuyos recursos se utilizarán para la separación de palabras, lematización y diccionario de sinónimos y palabras irrelevantes (o palabra irrelevante) eliminación como parte de la consulta.Is the language whose resources will be used for word breaking, stemming, and thesaurus and noise-word (or stopword) removal as part of the query. Este parámetro es opcional y puede especificarse como un valor hexadecimal, un entero o una cadena correspondiente al identificador de configuración regional (LCID) de un idioma.This parameter is optional and can be specified as a string, integer, or hexadecimal value corresponding to the locale identifier (LCID) of a language. Si se especifica language_term, el idioma que representa se aplicará a todos los elementos de la condición de búsqueda.If language_term is specified, the language it represents will be applied to all elements of the search condition. Si no se especifica ningún valor, se utiliza el idioma de texto completo de la columna.If no value is specified, the column full-text language is used.

Si se almacenan juntos documentos de idiomas diferentes como objetos binarios grandes (BLOB) en una sola columna, el identificador de configuración regional (LCID) de un documento determinado determina qué idioma se usa para indizar su contenido.If documents of different languages are stored together as binary large objects (BLOBs) in a single column, the locale identifier (LCID) of a given document determines what language is used to index its content. Al consultar este tipo de columna, especificar LANGUAGE**language_term puede aumentar la probabilidad de encontrar una coincidencia acertada.When querying such a column, specifying LANGUAGE**language_term can increase the probability of a good match.

Cuando se especifica como una cadena, language_term corresponde a la alias valor de columna en la sys.syslanguages vista de compatibilidad.When specified as a string, language_term corresponds to the alias column value in the sys.syslanguages compatibility view. La cadena debe estar delimitada con comillas sencillas, como en 'language_term'.The string must be enclosed in single quotation marks, as in 'language_term'. Cuando se especifica como un entero, language_term es el LCID real que identifica el idioma.When specified as an integer, language_term is the actual LCID that identifies the language. Cuando se especifica como un valor hexadecimal, language_term es 0x seguido del valor hexadecimal del LCID.When specified as a hexadecimal value, language_term is 0x followed by the hexadecimal value of the LCID. El valor hexadecimal no puede superar los ocho dígitos, incluidos los ceros a la izquierda.The hexadecimal value must not exceed eight digits, including leading zeros.

Si el valor está en formato DBCS (juego de caracteres de doble byte), MicrosoftMicrosoft SQL ServerSQL Server lo convertirá a Unicode.If the value is in double-byte character set (DBCS) format, MicrosoftMicrosoft SQL ServerSQL Server will convert it to Unicode.

Si el idioma especificado no es válido o no hay recursos instalados que se correspondan con dicho idioma, SQL ServerSQL Server devuelve un error.If the language specified is not valid or there are no resources installed that correspond to that language, SQL ServerSQL Server returns an error. Para usar recursos de idioma neutro, especifique 0x0 como language_term.To use the neutral language resources, specify 0x0 as language_term.

top_n_by_ranktop_n_by_rank
Especifica que solo el n coincidencias con una clasificación más altos, en orden descendente, se devuelven.Specifies that only the n highest ranked matches, in descending order, are returned. Solo se aplica cuando un valor entero, n, se especifica.Applies only when an integer value, n, is specified. Si se combina top_n_by_rank con otros parámetros, es posible que la consulta devuelva menos filas de las que en realidad coinciden con todos los predicados.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 permite aumentar el rendimiento de las consultas recuperando solamente las coincidencias más relevantes.top_n_by_rank allows you to increase query performance by recalling only the most relevant hits.

<contains_search_condition><contains_search_condition>
Especifica el texto que se va a buscar en column_name y las condiciones para obtener coincidencias.Specifies the text to search for in column_name and the conditions for a match. Para obtener información acerca de las condiciones de búsqueda, vea CONTAINS (Transact-SQL).For information about search conditions, see CONTAINS (Transact-SQL).

ComentariosRemarks

Los predicados y las funciones de texto completo operan en una única tabla, que se obtiene del predicado FROM.Full-text predicates and functions work on a single table, which is implied in the FROM predicate. Para buscar en varias tablas, utilice una tabla combinada en la cláusula FROM a fin de buscar en un conjunto de resultados que sea el producto de dos o más tablas.To search on multiple tables, use a joined table in your FROM clause to search on a result set that is the product of two or more tables.

La tabla devuelta tiene una columna denominada clave que contiene los valores de clave de texto completo.The table returned has a column named KEY that contains full-text key values. Cada tabla indizada de texto completo tiene una columna cuyos valores se garantiza que sean únicos y los valores devueltos en la clave columna son los valores de clave de texto completo de las filas que cumplen los criterios de selección especificados en el contiene búsqueda condición.Each full-text indexed table has a column whose values are guaranteed to be unique, and the values returned in the KEY column are the full-text key values of the rows that match the selection criteria specified in the contains search condition. El TableFulltextKeyColumn propiedad, obtenido mediante la función OBJECTPROPERTY, proporciona la identidad de esta columna de clave única.The TableFulltextKeyColumn property, obtained from the OBJECTPROPERTYEX function, provides the identity of this unique key column. Para obtener el identificador de la columna asociada a la clave de texto completo del índice de texto completo, use sys.fulltext_indexes.To obtain the ID of the column associated with the full-text key of the full-text index, use sys.fulltext_indexes. Para obtener más información, consulte sys.fulltext_indexes (Transact-SQL).For more information, see sys.fulltext_indexes (Transact-SQL).

Para obtener las filas que desee de la tabla original, especifique una combinación con las filas de CONTAINSTABLE.To obtain the rows you want from the original table, specify a join with the CONTAINSTABLE rows. La forma típica de la cláusula FROM de una instrucción SELECT que utiliza CONTAINSTABLE es la siguiente:The typical form of the FROM clause for a SELECT statement using CONTAINSTABLE is:

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

La tabla generada por CONTAINSTABLE incluye una columna denominada rango.The table produced by CONTAINSTABLE includes a column named RANK. El rango columna es un valor (de 0 a 1000) para cada fila que indica el grado de coincidencia una fila con los criterios de selección.The RANK column is a value (from 0 through 1000) for each row indicating how well a row matched the selection criteria. Este valor de clasificación suele utilizarse en las instrucciones SELECT de una de estas maneras:This rank value is typically used in one of these ways in the SELECT statement:

  • En la cláusula ORDER BY, para devolver las filas de mayor valor al principio de la tabla.In the ORDER BY clause to return the highest-ranking rows as the first rows in the table.

  • En la lista de selección, para ver el valor de clasificación asignado a cada fila.In the select list to see the rank value assigned to each row.

PermisosPermissions

Solamente disponen de permisos de ejecución los usuarios que tienen los permisos SELECT adecuados en la tabla o en las columnas de la tabla a las que se hace referencia.Execute permissions are available only by users with the appropriate SELECT privileges on the table or the referenced table's columns.

EjemplosExamples

A.A. Ejemplo sencilloSimple Example

El ejemplo siguiente se crea y rellena una tabla sencilla de dos columnas, listado 3 condados y los colores de sus marcas.The following example creates and populates a simple table of two columns, listing 3 counties and the colors in their flags. La TI se crea y rellena un catálogo de texto completo y un índice en la tabla.The it creates and populates a full-text catalog and index on the table. El CONTAINSTABLE se muestra la sintaxis.Then the CONTAINSTABLE syntax is demonstrated. En este ejemplo se muestra cómo el valor de rango aumenta de tamaño superior cuando se alcanza el valor de búsqueda varias veces.This example demonstrates how the rank value grows higher when the search value is met multiple times. En la última consulta, Tanzania que contiene el color verde y negro tiene un rango superior que Italia que contienen sólo uno de los colores consultados.In the last query, Tanzania which contains both green and black has a higher rank than Italy which contain only one of the queried colors.

CREATE TABLE Flags (Country nvarchar(30) NOT NULL, FlagColors varchar(200));  
CREATE UNIQUE CLUSTERED INDEX FlagKey ON Flags(Country);  
INSERT Flags VALUES ('France', 'Blue and White and Red');  
INSERT Flags VALUES ('Italy', 'Green and White and Red');  
INSERT Flags VALUES ('Tanzania', 'Green and Yellow and Black and Yellow and Blue');  
SELECT * FROM Flags;  
GO  
  
CREATE FULLTEXT CATALOG TestFTCat;  
CREATE FULLTEXT INDEX ON Flags(FlagColors) KEY INDEX FlagKey ON TestFTCat;  
GO   
  
SELECT * FROM Flags;  
SELECT * FROM CONTAINSTABLE (Flags, FlagColors, 'Green') ORDER BY RANK DESC;  
SELECT * FROM CONTAINSTABLE (Flags, FlagColors, 'Green or Black') ORDER BY RANK DESC;  

b.B. Devolver valores de clasificaciónReturning rank values

En el ejemplo siguiente se buscan todos los nombres de producto que contienen las palabras “frame”, “wheel” o “tire” y se asignan ponderaciones distintas a cada palabra.The following example searches for all product names containing the words "frame," "wheel," or "tire," and different weights are given to each word. Por cada fila devuelta que cumpla estos criterios de búsqueda, se muestra la precisión relativa (el valor de clasificación) de la coincidencia.For each returned row matching these search criteria, the relative closeness (ranking value) of the match is shown. Además, las filas cuyo valor de clasificación es más alto se devuelven primero.In addition, the highest ranking rows are returned first.

USE AdventureWorks2012;  
GO  
  
SELECT FT_TBL.Name, KEY_TBL.RANK  
    FROM Production.Product AS FT_TBL   
        INNER JOIN CONTAINSTABLE(Production.Product, Name,   
        'ISABOUT (frame WEIGHT (.8),   
        wheel WEIGHT (.4), tire WEIGHT (.2) )' ) AS KEY_TBL  
            ON FT_TBL.ProductID = KEY_TBL.[KEY]  
ORDER BY KEY_TBL.RANK DESC;  
GO  

C.C. Devolver valores de clasificación más altos que un valor especificadoReturning rank values greater than a specified value

Se aplica a: desde SQL Server 2012 (11.x)SQL Server 2012 (11.x) hasta SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

En el ejemplo siguiente se usa NEAR para buscar “bracket” y “reflector” cercanos entre sí en la tabla Production.Document.The following example uses NEAR to search for "bracket" and "reflector" close to each other in the Production.Document table. Se devuelven solo las filas con un valor de rango de 50 o superior.Only rows with a rank value of 50 or higher are returned.

USE AdventureWorks2012  
GO  
  
SELECT DocumentNode, Title, DocumentSummary  
FROM Production.Document AS DocTable   
INNER JOIN CONTAINSTABLE(Production.Document, Document,  
  'NEAR(bracket, reflector)' ) AS KEY_TBL  
  ON DocTable.DocumentNode = KEY_TBL.[KEY]  
WHERE KEY_TBL.RANK > 50  
ORDER BY KEY_TBL.RANK DESC;  
GO  

Nota

Si en una consulta de texto completo no se especifica un entero como la distancia máxima, un documento que contiene solo los aciertos cuyo intervalo es mayor que 100 términos lógicos no cumplirá los requisitos NEAR, y la clasificación será 0.If a full-text query does not specify an integer as the maximum distance, a document that contains only hits whose gap is greater than 100 logical terms will not meet the NEAR requirements, and its ranking will be 0.

D.D. Devolver los 5 mejores resultados utilizando top_n_by_rankReturning top 5 ranked results using top_n_by_rank

En el ejemplo siguiente se devuelve la descripción de los 5 productos más destacados, donde la columna Description contiene la palabra “aluminum” cerca de la palabra “light” o de la palabra “lightweight”.The following example returns the description of the top 5 products where the Description column contains the word "aluminum" near either the word "light" or the word "lightweight".

USE AdventureWorks2012;  
GO  
  
SELECT FT_TBL.ProductDescriptionID,  
   FT_TBL.Description,   
   KEY_TBL.RANK  
FROM Production.ProductDescription AS FT_TBL INNER JOIN  
   CONTAINSTABLE (Production.ProductDescription,  
      Description,   
      '(light NEAR aluminum) OR  
      (lightweight NEAR aluminum)',  
      5  
   ) AS KEY_TBL  
   ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY];  
GO  

GO

E.E. Especificar el argumento LANGUAGESpecifying the LANGUAGE argument

En el siguiente ejemplo se muestra la forma de utilizar el argumento LANGUAGE.The following example shows using the LANGUAGE argument.

USE AdventureWorks2012;  
GO  
  
SELECT FT_TBL.ProductDescriptionID,  
   FT_TBL.Description,   
   KEY_TBL.RANK  
FROM Production.ProductDescription AS FT_TBL INNER JOIN  
   CONTAINSTABLE (Production.ProductDescription,  
      Description,   
      '(light NEAR aluminum) OR  
      (lightweight NEAR aluminum)',  
      LANGUAGE N'English',  
      5  
   ) AS KEY_TBL  
   ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY];  
GO  

Nota

El LENGUAJE language_term argumentis no es necesario para usar top_n_by_rank.The LANGUAGE language_term argumentis not required for using top_n_by_rank.

Vea tambiénSee Also

Limitar los resultados de búsqueda con RANK Limit Search Results with RANK
Consultar con búsqueda de texto completo Query with Full-Text Search
Crear consultas de búsqueda de texto completo (Visual Database Tools) Create Full-Text Search Queries (Visual Database Tools)
CONTAINS (Transact-SQL) CONTAINS (Transact-SQL)
Consultar con búsqueda de texto completo Query with Full-Text Search
SELECT (Transact-SQL) SELECT (Transact-SQL)
FROM (Transact-SQL)FROM (Transact-SQL)