2016-06-25 18 views
1

Ich habe eine Abfrage zum Abrufen von Informationen über benutzerdefinierte Tabellenarten.Wie kann ich meine aktuelle Abfrage zu benutzerdefinierten Tabellenarten abschließen und Schema, IsIdentity, IsPrimaryKey und ... erhalten?

Ich brauche diese Abfrage zu vervollständigen, indem Sie die folgenden Spalten hinzugefügt:

Die Abfrage:

SELECT o.name AS TableName , 
     c.name AS ColumnName , 
     c.isnullable AS [IsNullable] , 
     t.name AS [DataType] , 
     t.[length] AS [MaxLength] , 
     t.prec AS [Precision] 
FROM syscolumns c 
     INNER JOIN sysobjects o ON o.id = c.id 
     LEFT JOIN systypes t ON t.xtype = c.xtype 
WHERE c.id IN (SELECT type_table_object_id 
        FROM  sys.table_types) 
ORDER BY o.name , 
     c.name; 

Und ich habe noch eine Frage über die obige Abfrage.

Ich habe benutzerdefinierte Tabelle Typen mit dbo.MyType als Name, aber in dieser Abfrage zeigt es mir 'TT_MyType_37C5420D'.

Wie kann ich den richtigen Namen bekommen?

+0

In SQL Server ** 2005 ** und neuere, sollten Sie das 'sys' Schema verwenden, wie' sys.columns' statt 'syscolumns' (und dasselbe gilt für' sys.tables', 'sys.types' usw.) –

+0

@marc_s Können Sie meine Abfrage umschreiben? – Hamed

Antwort

0

Sie sollten die neuen Katalogansichten aus dem sys Schema als von SQL Server 2005 und vermeiden verwenden die alte syscolumns, sysobjects usw.

Wenn Ihre Abfrage dieses Umschreiben:

SELECT 
    tt.name AS TableName, 
    c.name AS ColumnName, 
    c.is_nullable AS [IsNullable], 
    c.is_identity, 
    t.name AS [DataType], 
    t.max_length [MaxLength], 
    t.precision AS [Precision] 
FROM 
    sys.table_types tt 
INNER JOIN 
    sys.columns c ON c.object_id = tt.type_table_object_id 
LEFT JOIN 
    sys.types t ON t.system_type_id = c.system_type_id 
ORDER BY 
    tt.name, c.name; 

Sie kann einfach auf die umfangreichere Information zugreifen, die in der sys Katalogsicht verfügbar ist - wie die c.is_identity Spalte auf sys.columns. Und auch - die name von sys.table_types scheint den menschlich lesbareren Namen zurückzugeben, wie Sie gesucht haben.

Schauen Sie sich die very extensive MSDN documentation on the sys catalog views viel mehr Informationen tun entdecken Sie interessiert sein könnten in