在 ADO.NET 中参数化 order by 子句的正确方法是什么?
有时需要按 2 列排序,而默认情况下仅按 1 列排序,有时您只想将 ASC 更改为 DEC。在这种情况下,仅使用字符串连接是否可以(假设输入不是直接来自用户,而只是在代码中查找或多或少的硬编码值)
尝试这样:
SELECT ...
ORDER BY
CASE WHEN @OrderBy = 'Option1' THEN SomeField END,
CASE WHEN @OrderBy = 'Option1' THEN SomeOtherField END DESC,
CASE WHEN @OrderBy = 'Option2' THEN Field75 END,
...
Run Code Online (Sandbox Code Playgroud)
这个想法是,如果 WHEN 不匹配,每个 CASE 语句将计算为 NULL。因此,如果您输入 Option2,那么您将获得前两个选项的常量值。
因此,使用它,您可以轻松地获得一些选项,让您按多个字段排序,或降序排序,或任何您想要的。
抢
SQL注入纯粹主义者会告诉你,字符串连接是绝对不允许的,因为总是存在另一个程序员可能扩展程序并将SQL语句暴露给外界的可能性。
然而,如果这些值是硬编码的(即作为常量),并且永远不会看到外部世界,那么是的,连接它是完全可以的。