CONTAINSTABLE (Transact-SQL)

Actualizado: 17 de julio de 2006

Devuelve una tabla con una o más filas para aquellas columnas que contengan datos de tipo carácter en las que haya 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. A CONTAINSTABLE se le puede hacer referencia en una cláusula FROM de una instrucción SELECT como si fuera un nombre de tabla normal.

Las consultas que utilizan CONTAINSTABLE especifican consultas de texto de tipo CONTAINS que devuelven un valor de clasificación por porcentaje de aciertos (RANK) y un valor de clave de texto (KEY) por cada fila. La función CONTAINSTABLE utiliza las mismas condiciones de búsqueda que el predicado CONTAINS.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL (Transact-SQL)

Sintaxis

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

Argumentos

  • table
    Es el nombre de la tabla que se ha marcado para consultas de texto. table puede ser el nombre de un objeto de base de datos de una, dos, tres o cuatro partes.
  • column_name
    Es el nombre de la columna en la que se va a buscar que reside en table. Las columnas de tipo char, varchar, nchar, nvarchar, text, ntext, image, xml, binary y varbinary son columnas válidas para la búsqueda de texto.
  • column_list
    Indica que se pueden especificar varias columnas, separadas por una coma. column_list se debe incluir entre paréntesis. A menos que se especifique language_term, el idioma de todas las columnas de column_list debe ser el mismo.
  • *
    Especifica que todas las columnas de la tabla registradas para búsquedas de texto se deben utilizar en la condición de búsqueda. Si en la cláusula FROM hay más de una tabla, * se tiene que especificar con el nombre de la tabla. A menos que se especifique language_term, el idioma de todas las columnas de la tabla debe ser el mismo.
  • LANGUAGE language_term
    Es el idioma cuyos recursos se utilizarán en la separación de palabras, desinencias, diccionarios, eliminación de palabras irrelevantes como parte de la consulta CONTAINS. Este parámetro es opcional y puede especificarse como valor hexadecimal, entero o cadena correspondiente al identificador de configuración regional (LCID) de un idioma. Si se especifica language_term, el idioma que representa se aplica a todos los elementos de la condición de búsqueda. Si no se especifica ningún valor, se utiliza el idioma de texto de la columna.

    Si el valor especificado es una cadena, language_term corresponde al valor de columna alias de la tabla del sistema syslanguages. La cadena debe ir entre comillas simples, como en 'language_term'. Si el valor especificado es un entero, language_term es el LCID real que identifica el idioma. Si se especifica como un valor hexadecimal, language_term es 0x seguido del valor hexadecimal del LCID. El valor hexadecimal no puede tener más de ocho dígitos, incluidos los ceros a la izquierda.

    Si el valor está en formato DBCS (juego de caracteres de doble byte), Microsoft SQL Server lo convertirá a Unicode.

    Si el idioma especificado no es válido o no hay recursos instalados que se correspondan con dicho idioma, SQL Server devuelve un error. Para utilizar recursos de idioma neutro, especifique 0x0 como language_term.

  • top_n_by_rank
    Especifica que sólo se devuelvan las ncoincidencias con una clasificación más alta, en orden descendente. Sólo se aplica cuando se especifica un valor entero, n. Si se realiza un filtrado adicional, se devolverán menos de n resultados.
  • <contains_search_condition>
    Especifica el texto que se va a buscar en column_name y las condiciones para obtener coincidencias. Para obtener más información, vea CONTAINS (Transact-SQL).

Notas

La tabla devuelta tiene una columna llamada KEY que contiene valores de claves de texto. Todas las tablas con textos indizados tienen una columna cuyos valores se garantizan que son únicos y los valores devueltos en la columna KEY son los valores de claves de texto de las filas que cumplen los criterios de selección especificados en la condición de búsqueda CONTAINS. La propiedad TableFulltextKeyColumn obtenida mediante la función OBJECTPROPERTY, proporciona la identidad de esta columna de clave única. Para obtener el Id. de la columna asociada a la clave de texto del índice de texto, utilice sys.fulltext_indexes. Para obtener más información, vea sys.fulltext_indexes (Transact-SQL).

Para obtener las filas que desee de la tabla original, especifique una combinación con las filas de CONTAINSTABLE. La forma típica de la cláusula FROM de una instrucción SELECT que utilice CONTAINSTABLE es:

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 que produce CONTAINSTABLE incluye una columna denominada RANK. La columna RANK es un valor (entre 0 y 1000) que indica para cada fila el grado en que cumple los criterios de selección. Este valor de clasificación se suele utilizar en las instrucciones SELECT de una de estas maneras:

  • En la cláusula ORDER BY, para devolver las filas de mayor valor al principio.
  • En la lista de selección, para ver el valor de clasificación asignado a cada fila.

CONTAINSTABLE no se reconoce como palabra clave si el nivel de compatibilidad es inferior a 70. Para obtener más información, vea sp_dbcmptlevel (Transact-SQL).

Permisos

Sólo disponen de permisos de ejecución los usuarios que tengan los permisos SELECT adecuados sobre la tabla o las columnas de la tabla a las que se hace referencia.

Ejemplos

A. Devolver valores de clasificación mediante CONTAINSTABLE

En este ejemplo se buscan todos los nombres de productos que contengan las palabras “breads”, “fish” o “beers”; se asignan pesos distintos a cada palabra. Por cada fila devuelta que cumpla los criterios de la búsqueda, se muestra la precisión relativa (valor de clasificación) de la coincidencia. Además, las filas cuyo valor de clasificación sea más alto se devuelven primero.

[!NOTA] Para ejecutar este ejemplo, tendrá que instalar la base de datos Northwind. Para obtener información acerca de cómo instalar la base de datos Northwind, vea Descargar las bases de datos de ejemplo Northwind y 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

B. Devolver valores de clasificación más altos que uno especificado mediante CONTAINSTABLE

En este ejemplo se devuelven la descripción y el nombre de categoría de todas las categorías de alimentos en las que la columna Description contenga las palabras "sweet and savory" cerca de la palabra sauces o de la palabra candies. Todas las filas cuyo nombre de categoría sea Seafood no se devuelven. Sólo se devuelven las filas cuyo valor de clasificación sea igual o superior a 2.

[!NOTA] Para ejecutar este ejemplo, tendrá que instalar la base de datos Northwind. Para obtener información acerca de cómo instalar la base de datos Northwind, vea Descargar las bases de datos de ejemplo Northwind y 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

C. Devolver los 10 mejores resultados utilizando CONTAINSTABLE y top_n_by_rank

En este ejemplo se devuelven la descripción y el nombre de categoría de las 10 categorías superiores de alimentos donde la columna Description contenga las palabras "sweet and savory" cerca de la palabra "sauces" o de la palabra "candies".

[!NOTA] Para ejecutar este ejemplo, tendrá que instalar la base de datos Northwind. Para obtener información acerca de cómo instalar la base de datos Northwind, vea Descargar las bases de datos de ejemplo Northwind y 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

D. Especificar el argumento LANGUAGE

En el siguiente ejemplo se muestra la forma de utilizar el argumento 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];

[!NOTA] El argumento LANGUAGE language_term no es necesario para utilizar top_n_by_rank.

Vea también

Referencia

CONTAINS (Transact-SQL)
Funciones de conjuntos de filas (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)

Otros recursos

Consultar SQL Server mediante la búsqueda de texto

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

17 de julio de 2006

Contenido nuevo:
  • Se ha agregado el ejemplo para el argumento LANGUAGE.