Sql 如果条件是select查询中的值数组,是否可以使用全文搜索表中的行?

Sql 如果条件是select查询中的值数组,是否可以使用全文搜索表中的行?,sql,sql-server,sql-server-2008,full-text-search,Sql,Sql Server,Sql Server 2008,Full Text Search,我想创建一个视图,我想使用一组关键字对一行进行全文搜索。这些关键字存在于数据库的表中 所以,是否可以像下面这样做,在这里我可以使用select语句动态地确定要过滤的关键字 SELECT * FROM table1 WHERE CONTAINS(Row1, '[SELECT k.Name FROM KeywordCategory kc inner join Keyword k on kc.KeywordId = k.Id where kc.Category in ('BrandA', 'Bran

我想创建一个视图,我想使用一组关键字对一行进行全文搜索。这些关键字存在于数据库的表中

所以,是否可以像下面这样做,在这里我可以使用select语句动态地确定要过滤的关键字

SELECT * FROM table1
WHERE CONTAINS(Row1, 
'[SELECT k.Name FROM KeywordCategory kc
inner join Keyword k
on kc.KeywordId = k.Id
where kc.Category in ('BrandA', 'BrandB', 'BrandC')]')

您好,是的,您可以在全文搜索索引列中使用contains。如果您想让两个单词一个挨着另一个,您可以在“keyboard2”附近使用包含“keyboard1”等

包含搜索条件不能引用其他表,但您可以通过从关键字构造变量来绕过此限制

-- build search condition, example: '"keyword1" OR "keyword2" OR "keyword3"'
declare @SearchCondition nvarchar(4000)
SELECT  @SearchCondition = IsNull(@SearchCondition + ' OR ', '') + '"' + k.Name + '"'
FROM KeywordCategory kc
inner join Keyword k on kc.KeywordId = k.Id
where kc.Category in ('BrandA', 'BrandB', 'BrandC')

SELECT  *
FROM    table1
WHERE   Contains(*, @SearchCondition)

但是,您无法在视图中执行此操作,因此必须将其作为函数或存储过程编写。

是的,但问题是我只知道关键字类别。我不知道属于他们的关键词。这就是为什么我需要一个select语句来查找它们。您可以执行对keybords的查询,并使用结果构造包含的查询。这可以在你的应用程序中完成。是的,我希望我可以在视图中完成这一切,因为它可能会被许多不同的系统访问,但是的,看起来这是不可能的。