FREETEXTTABLE (Transact-SQL)
Renvoie une table contenant aucune, une ou plusieurs lignes dans les colonnes qui contiennent des types de données basés sur des caractères dont les valeurs correspondent à la signification, mais pas aux mots exacts, du texte spécifié dans freetext_string. FREETEXTTABLE peut être uniquement référencée dans la clause FROM d'une instruction SELECT comme un nom de table classique.
Les requêtes qui utilisent FREETEXTTABLE spécifient des requêtes de texte intégral en texte libre qui retournent une valeur de classement de pertinence (RANK) et une clé de texte intégral (KEY) pour chaque ligne.
Syntaxe
FREETEXTTABLE (table , { column_name | (column_list) | * }
, 'freetext_string'
[ , LANGUAGE language_term ]
[ , top_n_by_rank ] )
Arguments
table
Nom de la table marquée pour les requêtes de texte intégral. L'argument table ou viewpeut être un nom d'objet de base de données composé d'une, deux ou trois parties. Lors de l'interrogation d'une vue, une seule table de base indexée en texte intégral peut être impliquée.table ne peut spécifier un nom de serveur ni être utilisé dans des requêtes exécutées sur des serveurs liés.
column_name
Nom d'une ou de plusieurs colonnes de texte intégral indexées de la table spécifiée dans la clause FROM. Les colonnes peuvent être de type char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary ou varbinary(max).column_list
Indique que plusieurs colonnes, délimitées par des virgules, peuvent être spécifiées. L'argument column_list doit être mis entre parenthèses. Une seule et même langue doit être utilisée dans toutes les colonnes de column_list, sauf si language_term est spécifié.*
Précise que toutes les colonnes enregistrées pour la recherche en texte intégral doivent être utilisées pour rechercher la chaîne freetext_string spécifique. À moins que la valeur de language_term soit spécifié, la langue de l'ensemble des colonnes de texte intégral indexées dans la table doit être la même.freetext_string
Texte à rechercher dans column_name. Tout texte, y compris des mots, expressions et phrases peuvent être entrés. Des correspondances sont générées si l'un des termes ou les formes de quelque terme que ce soit sont trouvés dans l'index de texte intégral.À la différence de la condition de recherche CONTAINS où AND est un mot clé, le mot « and » est considéré comme un mot parasite, où mot vide dans freetext_string et il est ignoré.
L'utilisation de WEIGHT, de FORMSOF, de caractères génériques, de NEAR et d'autres syntaxes n'est pas autorisée. La chaîne freetext_string est découpée en mots dont les racines sont extraites et traitées par le dictionnaire des synonymes. Si freetext_string est entre guillemets doubles, c'est une correspondance globale qui est recherchée ; les étapes d'extraction de racines et de comparaison au dictionnaire des synonymes ne sont pas effectuées.
LANGUAGE language_term
Langue dont les ressources seront utilisées pour l'analyse lexicale, la recherche de radical, l'utilisation du dictionnaire de synonymes et la suppression de mots vides dans la requête. Ce paramètre est facultatif et peut être spécifié sous la forme d'une chaîne, d'un entier ou d'une valeur hexadécimale correspondant à l'identificateur de paramètres régionaux (LCID) d'une langue. Si vous spécifiez language_term, la langue qu'il représente est appliquée à tous les éléments de la condition de recherche. Si aucune valeur n'est définie, la langue de texte intégral de la colonne est utilisée.Si des documents de langues différentes sont stockés ensemble en tant qu'objets blob dans une colonne unique, l'identificateur de paramètres régionaux (LCID) d'un document donné détermine la langue utilisée pour l'indexation de son contenu. Lors de l'interrogation d'une telle colonne, la spécification de LANGUAGElanguage_term permet d'augmenter la probabilité d'une correspondance correcte.
Lorsqu'il est spécifié comme chaîne, l'argument language_term correspond à la valeur de la colonne alias dans la vue de compatibilité sys.syslanguages (Transact-SQL). La chaîne doit être placée entre guillemets simples, comme dans la chaîne 'language_term'. Lorsqu'il est spécifié sous forme de nombre entier, language_term représente le LCID réel qui identifie la langue. Quand il est spécifié comme valeur hexadécimale, l'argument language_term est 0x suivi de la valeur hexadécimale du LCID. La valeur hexadécimale ne doit pas dépasser huit caractères, y compris les zéros non significatifs.
Si la valeur est au format de jeu de caractères codés sur deux octets (DBCS), MicrosoftSQL Server la convertit en Unicode.
Si la langue spécifiée n'est pas valide ou si aucune ressource correspondant à cette langue n'est installée, SQL Server retourne une erreur. Pour utiliser des ressources de langage neutre, indiquez 0x0 pour language_term.
top_n_by_rank
Spécifie que seules les n correspondances de rang le plus élevé seront retournées par ordre décroissant. Applicable uniquement lorsque la valeur n spécifiée est un entier. Si top_n_by_rank est combiné à d'autres paramètres, la requête peut retourner moins de lignes que le nombre de lignes qui correspondent réellement à tous les prédicats. top_n_by_rank vous permet d'augmenter les performances des requêtes en rappelant uniquement les accès les plus pertinents.
Notes
Les prédicats et les fonctions de texte intégral s'appliquent à une table unique, ce qui est implicite dans le prédicat FROM. Pour effectuer des recherches sur plusieurs tables, utilisez une table jointe dans votre clause FROM afin de baser votre recherche sur un jeu de résultats qui est le produit de deux tables ou plus.
FREETEXTTABLE utilise les mêmes conditions de recherche que le prédicat FREETEXT.
Comme CONTAINSTABLE, la table retournée possède des colonnes nommées KEY et RANK, qui sont référencées à l'intérieur de la requête pour obtenir les lignes appropriées et utiliser les valeurs de rang des lignes.
FREETEXTTABLE n'est pas reconnu en tant que mot clé si le niveau de compatibilité est inférieur à 70. Pour plus d'informations, consultez sp_dbcmptlevel (Transact-SQL).
Autorisations
FREETEXTTABLE ne peut être appelée que par les utilisateurs disposant des privilèges SELECT appropriés sur la table spécifiée ou les colonnes référencées de la table.
Exemples
L'exemple suivant renvoie le nom et la description de toutes les catégories qui ont un rapport avec les mots sweet, candy, bread, dry ou meat.
[!REMARQUE]
Pour exécuter cet exemple, vous allez devoir installer la base de données Northwind. Pour plus d'informations sur l'installation de la base de données Northwind, consultez Téléchargement des exemples de bases de données Northwind et 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
L'exemple suivant est identique et illustre l'utilisation des paramètres LANGUAGElanguage_term et 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
[!REMARQUE]
Le paramètre LANGUAGE language_term n'est pas requis pour utiliser le paramètre top_n_by_rank .
Voir aussi