如果存储过程中参数为空,则选择全部

2024-01-08

我想在 SQL Server 中创建一个过程来选择并连接两个表。参数@company、@from 和@to 始终被设置,但@serie_type 可以为NULL。如果@serie_type不为NULL我只想包含指定的类型,简单AND S.Type = @serie_type,但如果 @serie_type 为 NULL,我想包含所有类型,简单,只是不包含 AND 语句。我的问题是我不知道 @serie_type 是否会被设置,因此我希望有这样的东西:

/* pseudocode */
??? = AND (IF @serie_type IS NOT NULL S.Type = @serie_type)

这是过程的简化版本:

CREATE PROCEDURE Report_CompanySerie
    @company    INT,
    @serie_type INT,
    @from       DATE,
    @to         DATE
AS
BEGIN
    SELECT
        *
    FROM Company C
        JOIN Series S ON S.Company_FK = C.Id
    WHERE C.Id = @company 
        AND S.Created >= @from
        AND S.Created <= @to
/* HERE IS MY PROBLEM */        
        AND ???
END
GO

不想重复选择,因为真正的选择比这个大得多。


常见的做法是:

WHERE 
C.Id = @company          
AND S.Created >= @from         
AND S.Created <= @to 
AND  (@serie_type IS NULL OR S.Type = @serie_type)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果存储过程中参数为空,则选择全部 的相关文章

随机推荐