2010-10-15 18 views
6

Ich verwende die folgende Abfrage Informationen über eine Spalten der Tabelle zu sammeln:Ist es möglich, dass eine SQL-Tabelle null Spalten hat?

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

Wenn diese Abfrage Null Ergebnisse zurückgibt, kann ich, dass die Tabelle nicht existiert erklären Sicherheit? Oder ist es irgendwie möglich, dass die Tabelle existiert, aber (pervers) keine Spalten hat?

Ich frage bereits INFORMATION_SCHEMA.TABLES, um herauszufinden, ob die Tabelle existiert, aber ich würde es gerne auf eine Abfrage reduzieren, wenn möglich.

Für die Zukunft, fand ich diese Fragen:
Create a table without columns
Can I select 0 columns in SQL Server?

Antwort

5

Wenn Sie versuchen:

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

SQL Server beklagt, dass:

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. 

So beim muss immer mindestens eine Spalte haben.

+0

Klingt angenehm. Ich habe etwas ähnliches versucht, was auch fehlgeschlagen ist. Ich möchte nur sicher sein, dass es keinen Randfall gibt, den ich vermisse. – Greg

1

Wenn Sie sich die Definition für die Ansicht INFORMATION_SCHEMA.COLUMNS ansehen, sehen Sie, dass sie mit der Tabelle sys.objects beginnt und nach Typen von 'U' (Tabelle, benutzerdefiniert) oder 'V sucht '(view), so führt es bereits die Prüfung auf Tabellenexistenz für Sie durch.

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

Sie bestätigen, was ich bereits in meiner Frage angegeben habe. Wenn eine Tabelle null Spalten haben kann, hilft mir diese Ansicht nicht, zwischen einer nicht vorhandenen Tabelle und einer Tabelle ohne Spalten zu unterscheiden. Meine Frage ist: Kann eine Tabelle null Spalten haben? – Greg

Verwandte Themen