【发布时间】:2011-10-11 20:20:05
【问题描述】:
我有一个 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
是否有另一种方法可以创建相同的结果而不必像上面那样创建两个不同的查询?
【问题讨论】:
-
您脚本的注释部分与您的描述略有不一致。特别是,评论说检索
IsAlive = 0的记录,但描述说的是IsAlive = 0 or NULL的行。 -
@Andriy - 感谢您的鹰眼;) .. og 帖子已更新。
标签: sql tsql sql-server-2008 conditional-statements ternary