在构建存储过程/查询时,我可以/应该使用 LIKE 标准作为 INNER JOIN 的一部分吗?我不确定我问的是否正确,所以让我解释一下。
我正在创建一个过程,该过程将获取要在包含文本的列中搜索的关键字列表。如果我坐在控制台前,我会这样执行它:
SELECT Id, Name, Description
FROM dbo.Card
WHERE Description LIKE '%warrior%'
OR
Description LIKE '%fiend%'
OR
Description LIKE '%damage%'
但是我在存储过程中进行“强类型”列表解析时学到的一个技巧是将列表解析为表变量/临时表,将其转换为正确的类型,然后对该表执行 INNER JOIN在我的最终结果集中。这在向过程发送整数 ID 列表时非常有用。我最终得到一个如下所示的最终查询:
SELECT Id, Name, Description
FROM dbo.Card
INNER JOIN @tblExclusiveCard ON dbo.Card.Id = @tblExclusiveCard.CardId
我想将此技巧与字符串列表一起使用。但由于我正在寻找一个特定的关键字,我将使用 LIKE 子句。所以理想情况下,我想我的最终查询应该是这样的:
SELECT Id, Name, Description
FROM dbo.Card
INNER JOIN @tblKeyword ON dbo.Card.Description LIKE '%' + @tblKeyword.Value + '%'
这可能/推荐吗?
有没有更好的方法来做这样的事情?
我将通配符放在子句两端的原因是因为卡片文本中使用了“archfiend”、“beast-warrior”、“direct-damage”和“battle-damage”术语。
我的印象是,根据性能,我可以使用我指定的查询还是使用全文关键字搜索来完成相同的任务?
除了让服务器对我想要进行文本搜索的字段进行文本索引之外,我还需要做些什么吗?