如果查询不为null,则TSQL应用条件

如果查询不为null,则TSQL应用条件,tsql,Tsql,我在T-SQL中有这个SP DECLARE @DATA_INIZIO AS DATE DECLARE @DATA_FINE AS DATE /*CODE TO POPULATE @DATA_INIZIO E @DATA_FINE*/ SELECT COUNT(*) FROM AA_V_ATS_Richieste R WHERE R.IdTipoRichiesta = 1 AND R.DataInizio>= @DATA_INIZIO AND R.DataFine <= @DATA

我在T-SQL中有这个SP

DECLARE @DATA_INIZIO AS DATE
DECLARE @DATA_FINE AS DATE

/*CODE TO POPULATE @DATA_INIZIO E @DATA_FINE*/

SELECT COUNT(*)
FROM AA_V_ATS_Richieste R
WHERE R.IdTipoRichiesta = 1 AND R.DataInizio>= @DATA_INIZIO
AND R.DataFine <= @DATA_FINE
现在@DATA\u和@DATA\u FINE可以为null或不为null。如果有办法更改我的查询,并且@Data\u-inizio不为null,则执行此条件,如果@Data\u-inizio为null,则不执行此条件?

类似以下内容:

SELECT COUNT(*)
FROM AA_V_ATS_Richieste R
WHERE
    R.IdTipoRichiesta = 1
    AND (R.DataInizio >= @DATA_INIZIO OR @DATA_INIZIO IS NULL)
    AND (R.DataFine <= @DATA_FINE OR @DATA_FINE IS NULL)

如果执行这个条件,您的意思是执行查询,那么您可以通过几种方式来执行查询

在存储过程内或任何可以应用T-SQL过程逻辑的地方,例如IF/THEN/ELSE/而您只需执行以下操作:

IF @DATA_INIZIO IS NOT NULL
BEGIN
  SELECT COUNT(*)
  FROM AA_V_ATS_Richieste R
  WHERE R.IdTipoRichiesta = 1 
  AND   R.DataInizio >= @DATA_INIZIO
  AND   R.DataFine   <= @DATA_FINE;
END; -- note: You don't need the BEGIN/END, just including for readability
作为内联查询的一部分,您可以在WHERE子句中创建“启动谓词”,如下所示:

SELECT *
FROM
(
  SELECT COUNT(*)
  FROM AA_V_ATS_Richieste R
  WHERE R.IdTipoRichiesta = 1 
  AND   R.DataInizio >= @DATA_INIZIO
  AND   R.DataFine   <= @DATA_FINE
) subquery(ttl)
WHERE @DATA_INIZIO IS NOT NULL;

如果@DATA\u\io为null,则不会返回任何内容。

如果您希望根据值是否为null进行不同的筛选,则可以在where子句中添加case语句。