SQL Server:选择前 0 个?

发布于 2024-11-08 00:07:03 字数 95 浏览 0 评论 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

咿呀咿呀哟 2024-11-15 00:07:03

这是一种获得空集的方法;例如,创建一个新的空表,其列与现有表相同;

SELECT TOP 0 * INTO new_table FROM old_table

或者充当列名称的来源
或者作为返回列详细信息但不向客户端层返回数据的一种方式
或者作为检查连接性的查询

它与以下相同;

SELECT * FROM table WHERE 0=1

Its a way of getting an empty set; for example to create a new empty table with the same columns as an existing one;

SELECT TOP 0 * INTO new_table FROM old_table

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;

SELECT * FROM table WHERE 0=1
酒解孤独 2024-11-15 00:07:03

要命名 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.

夕嗳→ 2024-11-15 00:07:03

通过这样做,您将得到一个包含所有列的空结果集,而不是没有结果。
如果使用存储过程的程序需要某些列,否则它会崩溃。

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.

翻了热茶 2024-11-15 00:07:03

您可以使用它来获取列名称。

You could use this to grab the column names.

走野 2024-11-15 00:07:03

使用它来创建一个临时表,其中数据库和 TEMPDB 的排序规则可能不同。

SELECT TOP(0) column INTO #temp FROM [mytable]

生成一个与我的表具有相同排序规则的临时表。这意味着

SELECT * FROM #temp T INNER JOIN [mytable] M ON M.column=T.column

不会因排序错误而失败。

Use this to create a temporary table where the collation of your DB and TEMPDB may differ.

SELECT TOP(0) column INTO #temp FROM [mytable]

Produces a temp table with same collation as my table. This then means

SELECT * FROM #temp T INNER JOIN [mytable] M ON M.column=T.column

Does not fail due to a collation error.

甜柠檬 2024-11-15 00:07:03

让我提供一个额外的用途:

如果您希望在输出中而不是在消息中打印消息,您可以使用

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'

鹿港小镇 2024-11-15 00:07:03

您可以使用它来检查您的 SQL 语法是否正确,而无需加载任何数据。

You can use this to check if your SQL syntax is correct without loading any data.

下壹個目標 2024-11-15 00:07:03

我主要在从现有数据库表创建临时表时使用它 - 没有任何数据。以下比使用 top 更可靠。

SELECT * FROM <table_name> LIMIT 0;

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.

SELECT * FROM <table_name> LIMIT 0;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文