MS SQL 2008 R2 中的 CONTAINS 函数

Phi*_*oie 5 sql-server-2008

我尝试以下 SQL 查询:

SELECT FirstName, SecondName FROM Persons WHERE CONTAINS(FirstName, 'Mat')
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

不能在表或索引视图 'Person' 上使用 CONTAINS 或 FREETEXT 谓词,因为它不是全文索引。

我需要索引FirstName列吗?怎么了 ?

Nic*_*ico 10

如果您想使用 CONTAINS 或 FREETEXT,您需要创建一个 FULL TEXT CATALOG 并在列上创建一个 FULL TEXT INDEX。但是,您可以使用 LIKE 语句来验证列是否“包含”特定字符串。

SELECT FirstName, SecondName FROM Persons WHERE FirstName LIKE '%Mat%'
Run Code Online (Sandbox Code Playgroud)

您必须知道 LIKE 比 contains 慢,但需要较少的配置。如果你想使用全文目录,你可以使用这个链接

希望这对你有帮助。

  • 我要补充的唯一一点是要注意这两种方法的性能影响。对于 LIKE 方法,当您使用 LIKE '%name%' 时,SQL Server 将必须扫描每一行,但是当您使用 LIKE 'Na%' 时,假设您在列上有一个索引,您可能会避开范围扫描。还有其他与全文索引相关的开销,我不会在这里介绍,我只是建议您阅读并测试它们以查看哪些(以及随着数据量的增长)表现最佳:) (3认同)