有没有比做这样的事情更方便的方法来比较 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 并比较它们。如果它们都是字符串,则用空格填充到最大长度并连接。
这是一个讨厌的技巧,你有时可以用来让自己摆脱困境,但最好不要使用它。一方面,它会破坏索引,因此您将对每个查询进行全表扫描。