我使用下面的查询从一个使用全文搜索的表中返回结果。在SQL2000中,只能搜索表中的一列或所有列。这在SQL 2008中可能吗?
我想搜索两个表,问题和解决方案(这两个表都已索引,并且在同一个表中):
DECLARE @topRank int set @topRank=(SELECT MAX(RANK)
FROM FREETEXTTABLE([Support_Calls], Problem, 'test', 1))
SELECT [ID] AS [Call No],Company_Name, Problem, Solution, CONVERT(VARCHAR(20),CAST((CAST(ftt.RANK as DECIMAL)/@topRank * 100) AS DECIMAL(13,0))) + '%' as Match
FROM [Support_Calls] INNER JOIN FREETEXTTABLE([Support_Calls], Problem, 'test') as ftt ON ftt.[KEY]=[ID] ORDER BY ftt.RANK DESC;根据我所看到的,FREETEXTTABLE不接受多个列?
发布于 2010-08-07 21:04:26
您可以在括号中指定它们;使用FREETEXTTABLE(tablename, (col1,col2,col3), 'expr')或使用星号来搜索索引中的所有列。
发布于 2010-08-07 21:09:17
From MSDN,
对于包含基于字符的数据类型的值,为这些列返回一个包含零行、一行或多行的表,这些值与指定freetext_string中的文本的含义匹配,但不完全匹配。与常规表名一样,只能在SELECT语句的FROM子句中引用FREETEXTTABLE。使用FREETEXTTABLE的查询指定freetext类型的全文查询,这些查询为每一行返回相关性排名值(RANK)和全文键( key )。
它们提供了以下语法:
FREETEXTTABLE (table , { column_name | (column_list) | * }
,'freetext_string'
[ , LANGUAGE language_term ]
[ ,top_n_by_rank ] )所以,是的,Alex K.也说过。
发布于 2013-03-06 21:33:33
如果您在不同的列上创建了全文索引,那么您可以简单地使用CONTAINS或FREETEXT来查看它们中的一个、全部或部分。如下所示:
SELECT *
FROM YourTable
WHERE CONTAINS(*, @SearchTerm);
If you want to look on all the columns that are included in the FULLTEXT INDEX. or:
SELECT *
FROM YourTable
WHERE CONTAINS((ProductName, ProductNumber, Color), @SearchTerm);如果要指定要搜索的列,请使用。如果您需要一列中的结果,则必须执行一个UNION操作,并对要搜索的每一列进行搜索。
SELECT *
FROM YourTable
WHERE CONTAINS(ProductName, @SearchTerm)
UNION
SELECT *
FROM YourTable
WHERE CONTAINS(ProductNumber, @SearchTerm)
UNION
SELECT *
FROM YourTable
WHERE CONTAINS(Color, @SearchTerm)https://stackoverflow.com/questions/3430386
复制相似问题