2015-04-15 7 views
1

Возможно ли выполнить замену строки внутри инструкции CONTAINS? Я мой код настроить так:SQL SERVER Полнотекстовый поиск - замена текста в операторе содержит

INSERT @searchfilter (productid, variantID) 
SELECT p.ProductID, pv.VariantID from dbo.Product p with(NOLOCK) 
    JOIN dbo.ProductVariant pv with(NOLOCK) on p.ProductID = pv.ProductID 
    JOIN dbo.ProductStore ps with(NOLOCK) on p.ProductID = ps.ProductID and ps.StoreID = @storeID 
    WHERE CONTAINS((dbo.vibe_GetValidSearchString(p.Name, @storeID), p.SKU), @NameField) 

Я получил сообщение об ошибке, хотя на CONTAINS заявление и я не могу получить его для компиляции. Ошибка An expression of non-boolean type specified in a context where a condition is expected.

Я также попытался изменить функцию в WHERE быть

... WHERE CONTAINS((REPLACE(p.Name,'-',''), p.SKU), @NameField) 

, но это дает ту же ошибку. Любые мысли или предложения?

+0

somerhing отсутствует между '' ((в ИНЕКЕ ?? – Hiten004

+0

@ Hiten004 Нет - Когда я 'WHERE СОДЕРЖАЩУЮ ((p.Name, p.Description, p.SKU), @NameField). Он отлично работает, но когда я пытаюсь изменить столбец, он выдает ошибку – user3267755

+0

. Не думаю, что вы можете помещать функцию в 'CONTAINS' https://msdn.microsoft.com/en-us /library/ms187787.aspx – Hiten004

ответ

1

Там есть ошибка в WHERE п

WHERE CONTAINS(
       (dbo.vibe_GetValidSearchString(p.Name, @storeID), p.SKU) 
       , @NameField 
       ) 

Посмотрите на второй линии

   (dbo.vibe_GetValidSearchString(p.Name, @storeID), p.SKU) 

Может операнд отсутствует, то, что вы будете делать с результатом vibe_GetValidSearchString и p.SKU?

Во всяком случае, вместо того, чтобы CONTAINS вы могли бы использовать LIKE оператор (вы ВГА конкатенации % с текстом)

0

Вы не сможете сделать это так, потому что первый аргумент CONTAINS это имя столбца, обычно не передается как строка.

Однако вы можете обойти его, используя EXEC. Что-то вдоль линий:

DECLARE @SQL AS NVARCHAR(MAX) = 'SELECT ... FROM ... WHERE CONTAINS(' + dbo.vibe_GetValidSearchString(p.Name, @storeID), p.SKU) ', ''' + @NameField + ''')' 
EXEC (@SQL) 
Смежные вопросы