sql - 通用选择不适用于位类型

标签 sql sql-server generics select stored-procedures

基于 this answer

我试着为我的 table 创建一个选择

ALTER PROCEDURE _Einrichtung_Select

    -- Parameters with default values
        @EinrichtungId      AS int          = NULL,
        @EinrichtungName    AS nvarchar(50) = NULL,
        @IsKueche           AS bit          = NULL,
        @RefEinrichtungId   AS int          = NULL,
        @RefSpeiseplantypId AS int          = NULL

AS

    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
        SET NOCOUNT ON;

    -- generic SELECT query
        SELECT  *
        FROM    Einrichtung
        WHERE   EinrichtungId       = ISNULL(@EinrichtungId,        EinrichtungId)
        AND     EinrichtungName     = ISNULL(@EinrichtungName,      EinrichtungName)
        AND     IsKueche            = ISNULL(@IsKueche,             IsKueche)
        AND     RefEinrichtungId    = ISNULL(@RefEinrichtungId,     RefEinrichtungId)
        AND     RefSpeiseplantypId  = ISNULL(@RefSpeiseplantypId,   RefSpeiseplantypId)

        ORDER BY EinrichtungName

    RETURN

但是我的位类型有问题example sqlfiddle就像您看到的那样,它应该返回 4 行,但它只返回 3 行,所以我错过了什么?

最佳答案

这是因为您可以将 null 作为列的值。而 SQL 有 three-value logic ,因此检查 null = null 将返回 UNKNOWN 而不是 TRUE(如您所料)。 我认为此查询会对您有所帮助:

select *
from myTable
where
    (@EinrichtungId is null or EinrichtungId = @EinrichtungId) and
    (@EinrichtungName is null or EinrichtungName = @EinrichtungName) and
    (@IsKueche is null or IsKueche = @IsKueche) and
    (@RefEinrichtungId is null or RefEinrichtungId = @RefEinrichtungId) and
    (@RefSpeiseplantypId is null or RefSpeiseplantypId = @RefSpeiseplantypId)

sql fiddle demo

关于sql - 通用选择不适用于位类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19007151/

相关文章:

mysql - 更新所有贷款 WHERE user_id=?在 DATEDIFF() >0 的情况下。错误 1242 和 1093

sql-server - SQL Server - 插入触发器后 - 更新同一表中的另一列

c# - 结果对象而不是输出参数

mysql - 我怎样才能计算帖子的数量?

sql - 限制平均使用的行数

sql - 如何在postgresql中使用设置种子选择可重复的随机数?

c# - 用数据库中的数据填充组合框

sql - 使用 MS SQL Server 2005,如何将详细记录合并到单个逗号分隔列表中

c# - 如何从泛型类型获取命名空间?

java - 解决Java中的 "unchecked warning",避免@suppressWarnings