是否有可以在 SELECT TOP 中使用的值来返回所有行?

Way*_*fer 13 sql-server

我允许最终用户定义查询返回的行数(SELECT TOP (@x))。是否有可以在返回所有行的地方输入的值?或者,如果他们想要返回所有行,我是否必须在没有 TOP (@x) 的情况下动态创建查询?

我正在使用 SQL Server 2012。

Ken*_*her 18

好吧,如果您不使用PERCENT,则看起来TOPBIGINT。这意味着您可以传入BIGINT的最大值,

SELECT TOP (9223372036854775807) * FROM table1
Run Code Online (Sandbox Code Playgroud)

我严重怀疑你永远不会看到这么大的桌子。我不确定这会对查询计划产生什么样的影响。

  • 假设变量`@x` 是一个BIGINT,那么`SET @x = 0x7fffffffffffffff` 对某些人来说可能更清楚。无论如何都更容易记住。 (7认同)
  • 好吧,如果您只记得以“7”开头,然后其余部分是“F”,那么更容易记住,并且您总共需要 16 个字符来表示 8 个字节。是的,如果分配给该数据类型的变量,它将被隐式转换。 (7认同)
  • @我一。整数类型的二进制表示极不可能改变。如果不期望我们可以依赖特定格式,那么 SQL Server 提供对整数类型进行操作的按位运算符就没有意义。 (3认同)

Mar*_*ith 12

你也可以考虑

SET ROWCOUNT @x;

SELECT Foo
FROM Bar
ORDER BY Baz;
Run Code Online (Sandbox Code Playgroud)

代替

SELECT TOP (@x) Foo
FROM Bar 
ORDER BY Baz;
Run Code Online (Sandbox Code Playgroud)

您需要将 @x 设置0为禁用它。

这在数据修改语句中已被弃用,但在SELECT.

在 2012 年,针对ROWCOUNT0 与某个非零值的情况编制了不同的计划。

如果ORDER BY Baz仅在那里赋予意义TOP而不是为结果提供显示顺序,并且您没有支持此功能的索引,那么在这种0情况下拆分为两个查询将避免不必要的排序。


SQL*_*DBA 8

SELECT TOP 100 PERCENT 可用于绕过在查询中使用“TOP”的任何错误。