FREETEXTTABLE (Transact-SQL)

Restituisce una tabella con una o più righe oppure nessuna riga per le colonne contenenti dati di tipo carattere per i valori che corrispondono al significato, ma non all'esatta formulazione, del testo specificato in freetext_string. È possibile fare riferimento a FREETEXTTABLE solo nella clausola FROM di un'istruzione SELECT come a un normale nome di tabella.

Le query che utilizzano FREETEXTTABLE specificano query full-text di tipo freetext che restituiscono una classificazione della pertinenza (RANK) e una chiave full-text (KEY) per ogni riga.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • table
    Nome della tabella contrassegnata per query full-text. table o viewpuò essere un nome di oggetto di database a una, due o tre parti. L'esecuzione della ricerca in una vista può interessare solo una tabella di base con indicizzazione full-text.

    table non può includere un nome di server e non può essere utilizzato per l'esecuzione di query su server collegati.

  • column_name
    Nome di una o più colonne indicizzate full-text della tabella specificata nella clausola FROM. La colonna può essere di tipo char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary o varbinary(max).

  • column_list
    Indica che è possibile specificare più colonne, separate da virgola. column_list deve essere racchiuso tra parentesi. Se non si specifica language_term, la lingua di tutte le colonne in column_list deve essere la stessa.

  • *
    Specifica che la ricerca della stringa specificata in freetext_string deve essere eseguita in tutte le colonne registrate per la ricerca full-text. Se non si specifica language_term, la lingua di tutte le colonne con indicizzazione full-text della tabella deve essere la stessa.

  • freetext_string
    Testo da cercare nella colonna specificata in column_name. È possibile specificare qualsiasi testo, comprese parole e frasi. Vengono generate corrispondenze se nell'indice full-text viene trovato un termine o vengono trovate le forme di un termine.

    A differenza di quanto avviene nella condizione di ricerca CONTAINS in cui AND è una parola chiave, se utilizzata in freetext_string la parola 'and' viene considerata una parola non significativa e verrà ignorata.

    Non è consentito utilizzare WEIGHT, FORMSOF, caratteri jolly, NEAR e altra sintassi. La stringa specificata in freetext_string viene sottoposta alla sillabazione, all'analisi morfologica e al thesaurus. Se freetext_string è racchiusa tra virgolette doppie, viene cercata una frase corrispondente. Il testo non viene sottoposto alla sillabazione e al thesaurus.

  • LANGUAGE language_term
    Lingua le cui risorse verranno utilizzate per il wordbreaking, lo stemming, il thesaurus e la rimozione di parole non significative come parte della query. Questo parametro è facoltativo e può essere specificato come valore stringa, intero o esadecimale corrispondente all'identificatore delle impostazioni locali (LCID) di una lingua. Se si specifica language_term, la lingua rappresentata dall'argomento verrà applicata a tutti gli elementi della condizione di ricerca. Se non si specifica alcun valore, verrà utilizzata la lingua full-text della colonna.

    Se documenti di lingue diverse vengono archiviati insieme come oggetti BLOB in una singola colonna, l'identificatore delle impostazioni locali (LCID) di un documento specifico determina la lingua da utilizzare per indicizzarne il contenuto. Se quando si esegue una query su una colonna di questo tipo si specifica LANGUAGElanguage_term, la probabilità di ottenere una corrispondenza pertinente sarà maggiore.

    Se specificato come stringa, language_term corrisponde al valore della colonna alias nella vista di compatibilità sys.syslanguages (Transact-SQL). La stringa deve essere delimitata da virgolette singole, come in 'language_term'. Se l'argomento language_term viene specificato come valore integer, corrisponde all'effettivo LCID che identifica la lingua. Se specificato come valore esadecimale, language_term è 0x seguito dal valore esadecimale dell'LCID. Il valore esadecimale non deve superare le otto cifre, inclusi gli zero iniziali.

    Se il valore è in formato DBCS (Double-Byte Character Set), verrà convertito in Unicode da MicrosoftSQL Server.

    Se la lingua specificata non è valida o non vi sono risorse installate corrispondenti a tale lingua, SQL Server restituisce un errore. Per utilizzare le risorse della lingua neutra, specificare 0x0 per language_term.

  • top_n_by_rank
    Specifica che devono essere restituite solo le ncorrispondenze di pertinenza maggiore in ordine decrescente. Viene applicata solo quando viene specificato un valore n integer. Se top_n_by_rank viene combinato con altri parametri, la query può restituire un numero minore di righe rispetto a quelle effettivamente corrispondenti a tutti i predicati. top_n_by_rank consente di migliorare le prestazioni delle query richiamando solo i risultati più significativi.

Osservazioni

I predicati e le funzioni full-text possono essere utilizzati in una singola tabella, specificata in modo implicito nel predicato FROM. Per cercare in più tabelle, utilizzare una tabella unita in join nella clausola FROM, che consente di eseguire una ricerca in un set di risultati prodotto da due o più tabelle.

La funzione FREETEXTTABLE utilizza le stesse condizioni di ricerca del predicato FREETEXT.

Come per CONTAINSTABLE, la tabella restituita include le colonne KEY e RANK, a cui viene fatto riferimento nella query per ottenere le righe appropriate e utilizzare i valori di pertinenza della riga.

Il predicato FREETEXTTABLE non viene riconosciuto come parola chiave se il livello di compatibilità è inferiore a 70. Per ulteriori informazioni, vedere sp_dbcmptlevel (Transact-SQL).

Autorizzazioni

La funzione FREETEXTTABLE può essere richiamata soltanto dagli utenti che dispongono delle autorizzazioni SELECT appropriate per la tabella specificata o per le colonne della tabella a cui viene fatto riferimento.

Esempi

Nell'esempio seguente vengono restituiti il nome e la descrizione di tutte le categorie correlate al termine sweet, candy, bread, dry o meat.

[!NOTA]

Per eseguire questo esempio, è necessario installare il database Northwind. Per informazioni sulle procedure di installazione del database Northwind, vedere Download dei database di esempio Northwind e 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

Nell'esempio seguente, identico al precedente, viene illustrato l'utilizzo dei parametri LANGUAGElanguage_term e 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]

Non è necessario che per il parametro LANGUAGE language_term venga utilizzato il parametro top_n_by_rank.