在SQL Select语句中有条件地附加AND到where子句

在SQL Select语句中有条件地附加AND到where子句,sql,sql-server,Sql,Sql Server,我已经搜索了所有地方,找到了关于条件where子句的问题,但没有找到关于在where子句上有条件地附加和的问题。我不是一个sql/数据库的人,我来自另一个IT领域,因为我们的常规数据库人员已经不在了,我今天陷入了一个“去尝试解决它”的问题。我有基本的编程概念和知识,但对我来说,sql只是一种异类 我有一个简单的建议: SELECT abc FROM table WHERE sdate=@somedt 但我需要补充一点: AND otherdt=@otherdt 但仅当@otherdt不为空时

我已经搜索了所有地方,找到了关于条件
where子句
的问题,但没有找到关于在
where子句
上有条件地附加
的问题。我不是一个sql/数据库的人,我来自另一个
IT
领域,因为我们的常规数据库人员已经不在了,我今天陷入了一个“去尝试解决它”的问题。我有基本的编程概念和知识,但对我来说,
sql
只是一种异类

我有一个简单的建议:

SELECT abc FROM table WHERE sdate=@somedt
但我需要补充一点:

AND otherdt=@otherdt
但仅当
@otherdt
不为空时。如果为空,我根本不想添加
部分。我试过几种方法,但它总是给我一个错误。感谢您的帮助。这是我最后一次失败的尝试:

SELECT abc FROM table 
WHERE sdate=@somedt
IF @otherdt IS NOT NULL
BEGIN
AND otherdt=@otherdt
END

您可以使用以下条件:

SELECT abc FROM table 
WHERE sdate=@somedt AND (@otherdt IS NULL OR otherdt = @otherdt)

您可以使用
UNION
,它在许多情况下比
查询性能更好

SELECT abc FROM table
WHERE sdate=@somedt AND @otherdt IS NULL
UNION
SELECT abc FROM table
WHERE sdate=@somedt AND otherdt = @otherdt

啊,谢谢shawnt00和ibiza,它们工作得很好。
DECLARE @Sql NVARCHAR(MAX)
       ,@somedt DATETIME 
       ,@otherdt DATETIME

SET @Sql = N' SELECT abc 
              FROM table 
              WHERE sdate = @somedt '
        + CASE WHEN  @otherdt IS NOT NULL 
                 THEN N' AND otherdt = @otherdt'
             ELSE N'' END

Exec sp_executesql @Sql 
                  ,N'@somedt DATETIME , @otherdt DATETIME'
                  ,@somedt
                  ,@otherdt
SELECT abc FROM table
WHERE sdate=@somedt AND @otherdt IS NULL
UNION
SELECT abc FROM table
WHERE sdate=@somedt AND otherdt = @otherdt