SQL SERVER全文搜索 - 替换contains语句中的文本

时间:2015-04-15 16:38:55

标签: sql sql-server

是否可以在CONTAINS语句中进行字符串替换?我的代码设置如下:

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)

但它给出了同样的错误。有什么想法或建议吗?

2 个答案:

答案 0 :(得分:1)

WHERE子句

中存在错误
WHERE CONTAINS(
               (dbo.vibe_GetValidSearchString(p.Name, @storeID), p.SKU)
               , @NameField
               )

看第二行

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

可能缺少操作数,您应该如何处理vibe_GetValidSearchStringp.SKU的结果?

无论如何,您可以使用CONTAINS运算符(而不是LIKE与文本连接)而不是%

答案 1 :(得分:0)

你不能这样做,因为CONTAINS的第一个参数是一个通常不作为字符串传递的列名。

但是,您可以使用EXEC解决此问题。有点像:

DECLARE @SQL AS NVARCHAR(MAX) = 'SELECT ... FROM ... WHERE CONTAINS(' + dbo.vibe_GetValidSearchString(p.Name, @storeID), p.SKU) ', ''' + @NameField + ''')'
EXEC (@SQL)