2012-02-07 14 views
10

So che posso ottenere l'accesso alle proprietà delle colonne tramite:Dove trovo i metadati del server Sql per i tipi di dati della colonna?

select * 
from sysobjects 

Quello che non riesco a trovare è però informazioni su dove trovare il tipo e la lunghezza tipo per una colonna, vale a dire: in

FOO VARCHAR(80) 

Dove cerco di trovare la parte "VARCHAR (80)" della dichiarazione del tipo nelle tabelle dei metadati?

Ho provato a guardare la tabella systypes, ma i suoi valori per xtype non corrispondono ai valori di xtype nella tabella sysobjects.

* Non ho accesso all'SQL originale utilizzato per creare queste tabelle né ho alcun diritto di amministratore.

Se si ha familiarità con DB2 sto cercando l'equivalente di

select name, 
     coltype, 
     length, 
    from sysibm.syscolumns 
where tbname = 'FOO' 

risposta

14

vi sono vicino. Puoi guardare sys.columns per ottenere le colonne.

È possibile filtrare su un tavolo con OBJECT_ID=OBJECT_ID('dbo.Foo').

È possibile ottenere la lunghezza da sys.columns. Il tipo di dati è nel campo system_type. Le chiavi per quel campo sono in sys.types.

nella sua interezza che si può fare:

select object_NAME(c.object_id), c.name, t.name, c.max_length 
from sys.columns c 
INNER JOIN sys.types t 
    ON t.system_type_id = c.system_type_id 

Come nota a margine, in SQL Server del sistema di tavoli sono obsolete (cioè syscolumns, sysobjects) ed è raccomandato come una buona pratica di utilizzare i punti di vista, invece, sys.columns, sys.objects, ecc.

Questo fornirà tabella, colonna, tipo di dati e lunghezza massima per ciascuno.

+7

Il join dovrebbe usare t.user_type_id invece di c.user_type_id. Se la colonna è un campo definito dall'utente, si otterranno più risultati per ciascuno. join sys.types t su t.user_type_id = c.system_type_id –

4

Il modo corretto per farlo è quello di unirsi a utente _type_id nella tabella sys.types:

select object_NAME(c.object_id), c.name, t.name, c.max_length 
from sys.columns c 
INNER JOIN sys.types t 
    ON t.user_type_id = c.user_type_id 

user_type_id è identico a system_type_id per i tipi di sistema - vedere la documentazione: https://msdn.microsoft.com/en-gb/library/ms188021.aspx

Problemi correlati