2010-10-15 20 views
6

我使用下面的查询,以收集有关表列的信息:SQL表可能有零列吗?

SELECT COLUMN_NAME, 
     ORDINAL_POSITION, 
     DATA_TYPE, 
     CHARACTER_MAXIMUM_LENGTH, 
     Is_NULLABLE 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'TableName' 
    ORDER BY ORDINAL_POSITION 

如果该查询返回零分的结果,我可以安全声明,该表不存在?或者是表格存在的某种可能性,但是(反过来)没有列?

我已经在查询INFORMATION_SCHEMA.TABLES了解表是否存在,但是如果可能的话,我想将它缩减为一个查询。

以供将来参考,我发现这些相关的问题:
Create a table without columns
Can I select 0 columns in SQL Server?

回答

5

如果你尝试:

create table TestTable (id int) 
alter table TestTable drop column id 

的SQL Server抱怨说:

Msg 4923, Level 16, State 1, Line 1 
ALTER TABLE DROP COLUMN failed because 'id' is the only data column in table 
'TestTable'. A table must have at least one data column. 

所以在能力必须至少有一列。

+0

听起来很合意。我尝试了类似的东西也失败了。我只是想确保没有我错过的边缘情况。 – Greg 2010-10-15 21:18:56

1

如果您要查看INFORMATION_SCHEMA.COLUMNS视图的定义,您会发现它以sys.objects表为开头,寻找类型'U'(表,用户定义的)或'V '(查看),所以它已经在为您执行表格存在检查。

CREATE VIEW INFORMATION_SCHEMA.COLUMNS 
AS 
SELECT 
... 
FROM 
sys.objects o JOIN sys.columns c ON c.object_id = o.object_id 
LEFT JOIN sys.types t ON c.user_type_id = t.user_type_id 
WHERE 
o.type IN ('U', 'V') 
+0

您正在确认我已经在我的问题中陈述的内容。如果一个表可以有零列,那么这个视图本身不会帮助我区分不存在的表和没有列的表。我的问题是:一个表可以有零列吗? – Greg 2010-10-15 23:16:03