是否可以在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)
但它给出了同样的错误。有什么想法或建议吗?
答案 0 :(得分: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
与文本连接)而不是%
答案 1 :(得分:0)
你不能这样做,因为CONTAINS
的第一个参数是一个通常不作为字符串传递的列名。
但是,您可以使用EXEC解决此问题。有点像:
DECLARE @SQL AS NVARCHAR(MAX) = 'SELECT ... FROM ... WHERE CONTAINS(' + dbo.vibe_GetValidSearchString(p.Name, @storeID), p.SKU) ', ''' + @NameField + ''')'
EXEC (@SQL)