FREETEXTTABLE (Transact-SQL)

Actualizado: 17 de julio de 2006

Devuelve una tabla de cero, una o más filas para las columnas que contienen datos de tipo carácter cuyos valores coinciden con el significado, aunque no literalmente, del texto especificado en freetext_string. Se puede hacer referencia a FREETEXTTABLE en la cláusula FROM de las instrucciones SELECT, como un nombre de tabla normal.

Las consultas que utilizan FREETEXTTABLE son consultas de texto libre que devuelven un valor de clasificación por importancia (RANK) y una clave de texto (KEY) para cada fila.

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

Sintaxis

FREETEXTTABLE (table , { column_name | (column_list) | * } 
          , 'freetext_string' 
     [ ,LANGUAGE language_term ] 
     [ ,top_n_by_rank ] )

Argumentos

  • table
    Es el nombre de la tabla que se ha marcado para consultas de texto. table o viewpuede ser el nombre de un objeto de base de datos de una, dos o tres partes. Al consultar una vista, sólo se puede incluir una tabla base con índices de texto.

    Para obtener más información, vea Convenciones de sintaxis de Transact-SQL (Transact-SQL).

    table no puede especificar un nombre de servidor y no puede utilizarse en consultas en servidores vinculados.

  • 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 y varbinary(max) son 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 que hayan sido registradas para la búsqueda de texto se tienen que utilizar para buscar la freetext_string determinada. A menos que se especifique language_term, el idioma de todas las columnas con índices de texto de la tabla debe ser el mismo.
  • freetext_string
    Es el texto que se va a buscar en column_name. Se puede escribir cualquier texto, incluidas palabras, frases y oraciones. Se generarán coincidencias si se encuentra algún término o las formas de algún término en el índice de texto.

    A diferencia de lo que sucede en la condición de búsqueda CONTAINS, donde AND es una palabra clave, cuando la palabra "and" se utiliza en freetext_string, se considera una palabra vacía y no se tiene en cuenta.

    No se permite el uso de WEIGHT, FORMSOF, caracteres comodín, NEAR y otros elementos sintácticos. freetext_string se separa en palabras, de las que se extraen las desinencias y se pasan por el diccionario de sinónimos. Si freetext_string se incluye entre comillas dobles, se realiza una búsqueda de frases coincidentes, por lo que no se extraen las desinencias ni se utiliza el diccionario de sinónimos.

  • LANGUAGE language_term
    Es el idioma cuyos recursos se van a utilizar para separar palabras, extraer desinencias, aplicar el diccionario de sinónimos y quitar palabras vacías como parte de la consulta FREETEXTTABLE. 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
    Cuando se especifica un valor entero (n), FREETEXTTABLE sólo devuelve las n primeras coincidencias, ordenadas por categoría.

    Si se utiliza un filtro además del predicado FREETEXTTABLE, dicho filtro se aplicará a las n primeras filas, y se devolverán menos filas que top_n_by_rank. Si se habilita la opción precompute rank del procedimiento almacenado sp_configure, puede aumentar el rendimiento de consultas FREETEXTTABLE que utilicen el parámetro top_n_by_rank. Para obtener más información, vea sp_configure (Transact-SQL) y sp_fulltext_service (Transact-SQL).

Notas

FREETEXTTABLE utiliza las mismas condiciones de búsqueda que el predicado FREETEXT.

Al igual que en CONTAINSTABLE, la tabla devuelta tiene las columnas KEY y RANK, a las que se hace referencia en la consulta para obtener las filas apropiadas y utilizar los valores de clasificación de filas.

FREETEXTTABLE 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 los usuarios que dispongan de los privilegios SELECT adecuados para la tabla especificada o las columnas de la tabla a las que se haga referencia pueden llamar a FREETEXTTABLE.

Ejemplos

En el ejemplo siguiente se devuelve el nombre y la descripción de todas las categorías relacionadas con sweet, candy, bread, dry o meat.

[!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.CategoryName 
    ,FT_TBL.Description
    ,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL 
    INNER JOIN FREETEXTTABLE(dbo.Categories, Description, 
        'sweetest candy bread and dry meat') AS KEY_TBL
        ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO

El ejemplo siguiente es idéntico y muestra el uso de los parámetros LANGUAGElanguage_term y top_n_by_rank .

USE Northwind;
SELECT FT_TBL.CategoryName 
    ,FT_TBL.Description
    ,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL 
    INNER JOIN FREETEXTTABLE(dbo.Categories, Description, 
        'sweetest candy bread and dry meat',LANGUAGE 'English',2) 
        AS KEY_TBL
        ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO

[!NOTA] El parámetr o LANGUAGE language_term no es necesario para utilizar el parámetro top_n_by_rank .

Historial de cambios

Versión Historial

17 de julio de 2006

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

Vea también

Referencia

CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
FREETEXT (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
precompute rank (opción)

Ayuda e información

Obtener ayuda sobre SQL Server 2005