gpt4 book ai didi

sql - 如何在 T-SQL 中的位字段上创建三元条件

转载 作者:行者123 更新时间:2023-12-04 13:54:59 27 4
gpt4 key购买 nike

我有一个 SQLExpress 表,其中包含一个用于存储 TRUE/FALSE 状态的位字段。

就像是:

+----+---------+
| ID | IsAlive |
+----+---------+
| 1 | 1 |
| 2 | 0 |
| 3 | NULL |
| 4 | 1 |
+----+---------+

使用该表作为我们的示例,我想创建一个存储过程,它将执行以下任一操作:
  • 检索所有记录。
  • 仅检索带有 IsAlive=1 的记录.
  • 仅检索带有 IsAlive=0 or NULL 的记录.

  • 我正在考虑如何在不必编写 IF/ELSE 条件的情况下创建查询 - 在我看来,有比做这样的事情更好/更干净的方法:
    -- The ternary logic...
    -- 0 or NULL retrieves records where IsAlive = 0 or NULL
    -- 1 retrieves records where IsAlive = 1
    -- Otherwise return all records

    -- sproc .....

    @IsAlive tinyint = 2 -- Return all records by default

    AS
    BEGIN
    IF(@SentToNTService = 0 OR @SentToNTService = 1)
    BEGIN
    SELECT *
    FROM MyTable
    WHERE IsAlive = @IsAlive;
    END
    ELSE -- Lame redundancy
    BEGIN
    SELECT *
    FROM MyTable
    END
    END

    是否有另一种方法可以创建相同的结果而不必像上面那样创建两个不同的查询?

    最佳答案

    关于如何执行此操作的 2 条建议:

    假设您的变量 @isalive 也被声明为“位”(应该是)

    SELECT * FROM @t
    WHERE @isalive is null or @isalive = coalesce(isalive, 0)

    如果您想使用不需要@isalive 为“位”的“位比较”解决方案(它适用于位和tinyint)
    SELECT * FROM @t
    WHERE coalesce((1-coalesce(isalive, 0)) ^ @isalive, 1) > 0

    第二种解决方案适用于像我这样的 Nerd 。一些铁杆用户可能会觉得它很有趣(或者至少很有趣),因为我认为它提供了最好的性能(如果我错了,请有人纠正我)。这是一个强大的解决方案,但很难阅读。

    关于sql - 如何在 T-SQL 中的位字段上创建三元条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6803921/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com