我有一个 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
有没有另一种方法可以创建相同的结果而不必像我上面那样创建两个不同的查询?