SQL Server:选择前 0 个?
我们刚刚在一个旧的生产存储过程中遇到了这一点(这里还有很多事情发生,但这是其逻辑的一个方面)。为什么有人会从表中选择前 0 行?这是某种我不熟悉的 SQL hack 或技巧吗?
We just came across this in an old production stored proc (there is a lot more going on in here, but this is in one leg of its logic). Why would someone ever select top 0 rows from a table? Is this some sort of SQL hack or trick I am not familiar with?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
这是一种获得空集的方法;例如,创建一个新的空表,其列与现有表相同;
或者充当列名称的来源
或者作为返回列详细信息但不向客户端层返回数据的一种方式
或者作为检查连接性的查询
它与以下相同;
Its a way of getting an empty set; for example to create a new empty table with the same columns as an existing one;
Or to act a as source for column names
Or as a way to return column details but no data to a client layer
Or as a query to check connectivity
Its the same as;
要命名 UNION ALL 中的列,
请务必阅读 Alex K. 的回答。他有很多理由我也用过。这只是最明显的一个。
To name columns in a UNION ALL
Be sure to read Alex K.'s answer as well. He has a lot of reasons that I have used as well. This was just the most obvious one.
通过这样做,您将得到一个包含所有列的空结果集,而不是没有结果。
如果使用存储过程的程序需要某些列,否则它会崩溃。
By doing this, you have an empty resultset with all columns instead of no result.
If the program using the stored procedure expects certain columns, it would crash otherwise.
您可以使用它来获取列名称。
You could use this to grab the column names.
使用它来创建一个临时表,其中数据库和 TEMPDB 的排序规则可能不同。
生成一个与我的表具有相同排序规则的临时表。这意味着
不会因排序错误而失败。
Use this to create a temporary table where the collation of your DB and TEMPDB may differ.
Produces a temp table with same collation as my table. This then means
Does not fail due to a collation error.
让我提供一个额外的用途:
如果您希望在输出中而不是在消息中打印消息,您可以使用
select top 0 0 'Your message here'
而不是
print 'Your message here '
Let me provide an additional use:
If you want a message printed in the output rather than in messages, you could use
select top 0 0 'Your message here'
instead of
print 'Your message here'
您可以使用它来检查您的 SQL 语法是否正确,而无需加载任何数据。
You can use this to check if your SQL syntax is correct without loading any data.
我主要在从现有数据库表创建临时表时使用它 - 没有任何数据。以下比使用 top 更可靠。
I have mostly used it when creating temp tables from an existing DB table - without any data. The following is more reliable though than using top.