我知道我可以使用以下查询返回一个空表:
select * from tbFoo where 1=2
但该代码对我来说并不好看。
这样做有“标准”方法吗?
如果你想知道我为什么要做这么奇怪的事情,那是因为I can't name the datatables I return from a stored procedure,所以我需要空的占位符。
答案 0 :(得分:25)
刚刚运行两个:
SELECT TOP 0 * FROM Table
and
SELECT * FROM Table WHERE 1=0
他们生成完全相同的执行计划。
答案 1 :(得分:1)
大多数时候,我看到1 = 0但是,这确实是你真正需要的标准方法。虽然真的很少见。
答案 2 :(得分:1)
你真正需要的是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'