来自 SQL Server 联机丛书:
要在 Microsoft SQL Server 2005 中编写全文查询,您必须学习如何使用 CONTAINS 和 FREETEXT Transact-SQL 谓词,以及 CONTAINSTABLE 和 FREETEXTTABLE 行集值函数。
这意味着上面使用 % 和 _ 编写的所有查询都不是有效的全文查询。
下面是调用 CONTAINSTABLE 函数时查询的样例。
SELECT RANK , * FROM TableName , CONTAINSTABLE (TableName, *, ' "*WildCard" ') searchTable WHERE [KEY] = TableName.pk ORDER BY searchTable.RANK DESC
为了让 CONTAINSTABLE 函数知道我正在使用通配符搜索,我必须将它用双引号引起来。我可以在开头或结尾使用通配符 *。在为 CONTAINSTABLE 函数构建搜索字符串时,您还可以做很多其他事情。您可以搜索靠近另一个词的词,搜索屈折词(驱动 = 驱动器、驱动器、驾驶和驱动),以及搜索另一个词的同义词(金属可以有铝和钢等同义词)。
我刚刚创建了一个表,在表上放置了一个全文索引并进行了几次测试搜索,没有出现问题,因此通配符搜索按预期工作。
[更新]
我看到您已经更新了您的问题,并且知道您需要使用其中一项功能。
您仍然可以在开头使用通配符进行搜索,但如果该单词不是通配符后面的完整单词,则必须在末尾添加另一个通配符。
Example: "*ildcar" will look for a single word as long as it ends with "ildcar".
Example: "*ildcar*" will look for a single word with "ildcar" in the middle, which means it will match "wildcard". [Just noticed that Markdown removed the wildcard characters from the beginning and ending of my quoted string here.]
[更新#2]
Dave Ward - 使用通配符和其中一个功能不应该是一个巨大的打击。如果我只用“*”创建了一个搜索字符串,它不会返回所有行,在我的测试用例中,它返回 0 条记录。