SQL Server存储过程 - 生成Where子句

时间:2014-04-13 08:24:33

标签: sql-server stored-procedures

我有三个参数@startDate@endDate@name。我需要创建一个像这样工作的查询。

  • 如果@startDate不为空,WHERE @startDate <= time
  • 如果@endDate不为空,请添加WHERE @endDate >= time
  • 如果@name不为空,请添加WHERE name LIKE @name

这就是我想要做的......这就是我写过的糟糕代码。

ALTER blahblah...
    @startDate varchar(10),
    @endDate varchar(10),
    @name varchar(7)
AS
BEGIN
SELECT *
FROM st.TB_RETENTION
WHERE  
    CASE WHEN @startDate != '' THEN @startDate <= time AND 
    CASE WHEN @endDate != '' THEN @endDate >= time AND
    CASE WHEN @GameCode != '' THEN name LIKE @name
END

我认为我非常接近......但不确定如何添加AND条件...对我有什么建议吗? :(

1 个答案:

答案 0 :(得分:2)

你的初步描述实际上几乎是正确的:

where (@startDate is null or @startDate <= time)
  and (@endDate is null or @endDate >= time)
  and (@gameCode is null or name like @name)