2013-05-15 9 views
16

In T-SQL (SQL Server 2000). Come posso elencare tutte le tabelle e le colonne in un database? Inoltre, in una query separata esiste un modo per elencare tutte le colonne insieme al tipo di dati e ai vincoli (NULLS, ecc.). Grazie.Tabelle elenco T-SQL, colonne

+3

Ha hai provato qualcosa? –

+2

Dai un'occhiata alle viste 'INFORMATION_SCHEMA' o' sysobjects', 'syscolumns' ecc. –

risposta

43

Si prega di controllare il information schema.

select * 
from MyDatabaseName.information_schema.columns 
order by table_name, ordinal_position 
+0

Grazie Tim, apprezzo questo. C'è un modo per aggiungere in quale database sono assegnate le tabelle? Vedo che il catalogo è padrone. – user1804387

+0

'usa MyDatabaseName;', quindi esegui una query. [MSDN: selezione di un database] (http://msdn.microsoft.com/en-us/library/ms180770.aspx). In alternativa, aggiungi il nome del DB alla tua clausola 'from' in normale [modalità in 4 parti] (http://msdn.microsoft.com/en-us/library/ms177563.aspx) (l'ho aggiunto alla risposta). –

+0

L'avevo appena scoperto. Grazie ancora – user1804387

10

Molti modi per farlo. Qui di seguito sono un paio di modi che si possono elencare:

Opzione 1:

SELECT db_name() as DATABASE_NAME, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, 
     COLUMN_DEFAULT, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, 
     NUMERIC_PRECISION, NUMERIC_PRECISION_RADIX, NUMERIC_SCALE, 
     DATETIME_PRECISION 
FROM INFORMATION_SCHEMA.COLUMNS 

Opzione 2:

DECLARE @SQL VARCHAR(8000) 
SELECT @SQL = '' 
SELECT @SQL = @SQL + 'UNION 
SELECT ''' + name + ''' [DataBaseName], t.name [TableName], c.name [ColumnName], st.name [DataType] FROM ' + name + '..sysobjects t INNER JOIN ' + name + '..syscolumns c ON t.id = c.id INNER JOIN '+ name + '..systypes st on c.xtype = st.xtype where t.xtype = ''U''' 
FROM master..sysdatabases 
WHERE name IN ('databasename1', 'databaseName2') -- change here !! 
SELECT @SQL = RIGHT(@SQL, LEN(@SQL)-5) + ' ORDER BY 1, 2, 3' 
EXEC(@SQL) 

Opzione 3:

select db_name() as database_name 
    ,table_name = sysobjects.name 
    ,column_name = syscolumns.name 
    ,datatype = systypes.name 
    ,length = syscolumns.length 
from sysobjects 
inner join syscolumns on sysobjects.id = syscolumns.id 
inner join systypes on syscolumns.xtype = systypes.xtype 
where sysobjects.xtype = 'U' 
order by sysobjects.name 
    ,syscolumns.colid