如果查询不为null,则TSQL应用条件
我在T-SQL中有这个SP如果查询不为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
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语句。