加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 在存储过程中选择all if参数为空

发布时间:2020-12-12 08:50:59 所属栏目:MsSql教程 来源:网络整理
导读:我想在SQL Server中创建一个将选择并连接两个表的过程.参数@company,@from和@to始终设置,但@serie_type可以为NULL.如果@serie_type不为NULL,我只想包括指定的类型,简单AND S.Type = @serie_type,但如果@serie_type为NULL,我想包括所有类型,简单,只是不包括AND
我想在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

不想复制选择,因为真正的选择是更大的这个.

解决方法

没有必要做AND(@serie_type IS NULL OR S.Type = @serie_type),因为SQL Server有一个内置函数来为你做这个逻辑.

尝试这个:

.
   .
   AND  S.Type = isnull( @serie_type,S.Type)

这返回

如果@serie_type为空,则为true,否则为@serie_type = S.Type如果@serie_type为空,则为true.

从MSDN:

IsNull Replaces NULL with the specified replacement value.

06001

The value of check_expression is returned if it is not NULL; otherwise,replacement_value is returned after it is implicitly converted to the type of check_expression,if the types are different.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读