TRUE/FALSE状態を格納するためのビットフィールドを含むSQLExpressテーブルがあります。
何かのようなもの:
+----+---------+
| ID | IsAlive |
+----+---------+
| 1 | 1 |
| 2 | 0 |
| 3 | NULL |
| 4 | 1 |
+----+---------+
そのテーブルを例として使用して、次のいずれかを実行する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つの異なるクエリを作成せずに、同じ結果を作成する別の方法はありますか?