次のようなことを行うよりも、T-SQL でデータのタプルを比較する便利な方法はありますか。
SELECT TOP 100 A, B
FROM MyTable
WHERE (A > @A OR (A = @A AND B > @B))
ORDER BY A, B
基本的に、(A, B) > (@A, @B) の行を探しています (order by 句と同じ順序)。3 つのフィールドがある場合もありますが、その場合はさらに醜くなります。
次のようなことを行うよりも、T-SQL でデータのタプルを比較する便利な方法はありますか。
SELECT TOP 100 A, B
FROM MyTable
WHERE (A > @A OR (A = @A AND B > @B))
ORDER BY A, B
基本的に、(A, B) > (@A, @B) の行を探しています (order by 句と同じ順序)。3 つのフィールドがある場合もありますが、その場合はさらに醜くなります。
いいえ、それはとても簡単です。実際、これが最も簡単であることは、真理値表を作成することで証明できます。(3列を設定: A<@A, A=@A, A>@A. 3行を設定: B<@B, B=@B, B>@B.)
A<@A | A=@A | A>@A
--------------------------
B<@B | F | F | T
--------------------------
B=@B | F | F | T
--------------------------
B>@B | F | T | T
いいえ。ただし、タプルのメンバーを直接比較可能なものに結合することはできます。たとえば、A と B が両方とも 0..99 の間の数値の場合、A*100+B と @A*100+@B を加算して比較します。両方とも文字列の場合は、スペースを最大長まで埋めて連結します。
これは、穴から抜け出すために時々使用できる厄介なトリックですが、それ以外の場合は使用しないことをお勧めします. 1 つには、インデックス作成が無効になるため、各クエリで完全なテーブル スキャンを実行することになります。