COALESCE和FTS

我有一个有'品牌'下拉和'模型'下拉的表单。我在这里搜索有一些品牌和/或型号的汽车。 现在,如果我选择“品牌”下拉列表中的“全部”和一些“模型”值而不是“全部”,我会使用   COALESCE(@品牌,cars.brand) 和   COALESCE(@模型,cars.model) 如果我为下拉菜单和特定结果选择“全部”,如果我选择一些值,它可以正常返回所有车辆。 现在我想使用带有
CONTAINS
关键字的FTS并使用类似的查询
CONTAINS(cars.model , 'COALESCE(@model,cars.model)')
正在返回,错误为   '('在全文搜索条件'COALESCE(@ model,cars.model)'附近的语法错误。 如果有人可以将我与COALESCE一起推荐给FTS的查询/ sproc,我真的很感激。请帮忙。 P.S
SET @SQL = '
SET @query_result = ( 
    SELECT items.id AS "ID"
            ,items.title AS "Title"
            ,cars.brand AS "Brand"
            ,cars.model AS "Model"
            ,cars.type AS "Type"
            ,items.city AS "City"
            ,items.name AS "Name"
            ,items.date_added AS "Date"
            ,items.small_1 AS "Image"
      FROM [cars]
      JOIN [items] 
        ON items.id=cars.item_id
     WHERE cars.item_id = COALESCE(@item_id,cars.item_id)
            AND CONTAINS(cars.brand ,''COALESCE('+@brand+',cars.brand)'')
            AND cars.model = COALESCE(@model,cars.model)
            AND cars.type = COALESCE(@type,cars.type)
            AND items.city = COALESCE(@city,items.city)
            AND DATEDIFF(DAY,items.date_added,GETDATE())<=COALESCE(@period,items.date_added)
            AND items.new = COALESCE(@isnew,items.new)
       FOR XML
      PATH(''car''),ROOT(''items''))'
    
已邀请:
这是我以前从未见过的模式,如果我在理解,请原谅我。 我很确定这条线是问题所在。
AND CONTAINS(cars.brand ,''COALESCE('+@brand+',cars.brand)'')
这个问题是它将生成子句:
AND CONTAINS(cars.brand, 'COALESCE(toyota,cars.brand)')
我认为这不是一个语法错误,但是那个合并表达式是一个文字字符串,并且评估不会发生。如果brand为null,您也会遇到问题,因为您将在SQL代码的第一部分和最后一部分附加NULL。 你可以简单地尝试:
AND CONTAINS(cars.brand, coalesce(@brand, cars.brand))
没有逃脱。如果由于某些原因不起作用,请尝试:
' + CASE WHEN @brand is null then '' else 'AND CONTAINS(cars.brand, @brand)' end + '
这只会在@brand首先不为null时插入子句,并且不受sql注入漏洞的影响,如果您手动转义引号则该漏洞。     

要回复问题请先登录注册