SQL表是否可能具有零列?

时间:2010-10-15 21:08:20

标签: sql sql-server

我正在使用以下查询来收集有关表格列的信息:

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?

2 个答案:

答案 0 :(得分: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.

因此,表格必须至少有一列。

答案 1 :(得分: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')