Могу ли я использовать UDF для условия поиска в функции CONTAINSTABLE - PullRequest
2 голосов
/ 22 февраля 2012

Я пишу запрос, который использует функцию CONTAINSTABLE.Для третьего параметра в вызове CONTAINSTABLE я получаю поисковый термин из UDF.Если я сохраню выходные данные этого UDF в локальной переменной, а затем передам переменную в функцию CONTAINSTABLE, она будет работать нормально:

declare @temp nvarchar(255) = dbo.udf_GenerateTerm()
select *  FROM ContainsTable([TableToSearch], Content, @temp, LANGUAGE 1033)

Однако, если я напрямую ссылаюсь на UDF как аргумент CONTAINSTABLE, я получаюсинтаксическая ошибка:

select * FROM ContainsTable([TableToSearch], Content, dbo.udf_GenerateTerm(), LANGUAGE 1033)

Есть ли способ обойти это или это ограничение SQL Server?

Спасибо.

1 Ответ

2 голосов
/ 12 ноября 2012

Это ограничение операции SQL Server CONTAINSTABLE.Вот грамматика для CONTAINSTABLE.

CONTAINSTABLE ( table , { column_name | ( column_list ) | * } , ' <contains_search_condition> ' 
     [ , LANGUAGE language_term] 
  [ , top_n_by_rank ] 
          ) 

содержит_поиск_условие - это интересующая нас часть. Грамматика определяется таким образом

<contains_search_condition> ::= 
    { <simple_term> 
    | <prefix_term> 
    | <generation_term> 
    | <generic_proximity_term> 
    | <custom_proximity_term> 
    |  <weighted_term> 
    } 
    | { ( <contains_search_condition> ) 
    { { AND | & } | { AND NOT | &! } | { OR | | } } 
     <contains_search_condition> [ ...n ] 
    }

simple_term состоит из слова .Слово определяется как

Это строка символов без пробелов и знаков препинания.

Документацию MSDN можно просмотреть по CONTAINS и * 1021.* CONTAINSTABLE для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...