WHERE语句基于变量值

时间:2013-12-10 19:39:56

标签: sql sql-server

我正在尝试过滤SELECT statament。我想要的行为是,如果参数@productId =%,那么我希望WHERE子句执行以下操作:

WHERE (DTH.TaskId IS NULL OR PDT.PK_Product LIKE @productId)

如果@productId不=%,我想要以下WHERE子句:

WHERE (PDT.PK_Product = @productId)

我无法实现这一目标。

我已经尝试过案例陈述,但无法理解它。我也尝试过:

WHERE IF @productId = '%' (
        DTH.TaskId IS NULL
        OR PDT.PK_Product LIKE @productId
        ) ELSE (
        PDT.PK_Product = @productId
        )

这会导致语法错误。我如何达到预期的效果?

3 个答案:

答案 0 :(得分:6)

WHERE
  (@productId = '%' AND (DTH.TaskId IS NULL OR PDT.PK_Product LIKE @productId))
  OR
  (NOT @productId = '%' AND (PDT.PK_Product = @productId))

答案 1 :(得分:0)

--assumes -1 and 0 are invalid TaskIds
WHERE PDT.PK_Product LIKE @productId 
    OR coalesce(DTH.TaskId, -1) = case when @productId = '%' THEN -1 ELSE coalesce(DTH.TaskID,0) END

答案 2 :(得分:0)

SELECT..
FROM..
WHERE @productId = '%' AND (DTH.TaskId IS NULL OR PDT.PK_Product LIKE @productId)

UNION

SELECT...
FROM...
WHERE @productId != '%' AND PDT.PK_Product = @productId