【问题标题】:What's the preferred way to return an empty table in SQL?在 SQL 中返回空表的首选方法是什么?
【发布时间】:2010-10-10 01:19:11
【问题描述】:

我知道我可以使用以下查询返回一个空表:

select * from tbFoo where 1=2

但该代码对我来说并不好看。

是否有“标准”方式来做到这一点?

如果你想知道我为什么要做这么奇怪的事情,那是因为I can't name the datatables I return from a stored procedure,所以我需要空的占位符。

【问题讨论】:

  • 您是否尝试从存储过程中填充数据表?
  • select * from tbFoo 其中 1=2 是我过去使用的。不确定它是否是“标准”方式,但我已经使用过很多次并且看到它被其他人使用。
  • @REA_ANDREW :我打算将此空数据用作存储过程的返回结果集这一事实并不意味着我不知道如何在 c# 中处理结果集。我建议你删除你的离题答案:)
  • 我已经删除了。 :) 我误解了你的问题和你的回答!

标签: sql


【解决方案1】:

只运行了两个:

SELECT TOP 0 * FROM Table
and
SELECT * FROM Table WHERE 1=0

它们产生完全相同的执行计划。

【讨论】:

  • @GateKiller :这看起来更好:)
  • 从 Table 中选择 top 0 1 怎么样?
【解决方案2】:

您真正需要的是information_schema,使用它可以让您找出表的定义。

你没有提到你使用的是哪个数据库,所以这里有一个关于information_schema Support in MySQL, PostgreSQL(和 MSSQL、Oracle 等)的链接

来自网站的示例;

SELECT table_name, column_name, is_nullable, data_type, character_maximum_length
FROM INFORMATION_SCHEMA.Columns
WHERE table_name = 'employees'

在您的情况下,您只需要列名;

SELECT column_name 
FROM INFORMATION_SCHEMA.Columns
WHERE table_name = 'employees'

【讨论】:

    【解决方案3】:

    大多数时候我看到 1=0,但是当你真的必须这样做时,这几乎是标准方法。虽然真的不得不这样做是很少见的。

    【讨论】:

    • 好的。根据我选择的表,是否有任何性能影响?我猜不是……
    • 我怀疑有什么大的性能问题,优化器会看到不需要从数据库中读取任何东西,看看执行计划。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 2015-06-22
    • 2011-07-13
    • 1970-01-01
    相关资源
    最近更新 更多