2015-04-15 106 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是'(('在where子句? – Hiten004

+0

@ Hiten004無缺之間 - 當我有'WHERE CONTAINS((p.Name,p.Description,p.SKU ),@NameField)'它的效果很好,但是當我嘗試改變列時,它會拋出一個錯誤 – user3267755

+0

我不認爲你可以在'CONTAINS'中放置函數https://msdn.microsoft.com/en-us /library/ms187787.aspx – Hiten004

回答

1

第二行

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

也許一個操作數是缺少有在WHERE條款

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

看一個錯誤,我應該與你的vibe_GetValidSearchStringp.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)