2013-05-15 10 views
16

W języku T-SQL (SQL Server 2000). Jak mogę wyświetlić wszystkie tabele i kolumny w bazie danych? Ponadto w oddzielnym zapytaniu istnieje sposób na wylistowanie wszystkich kolumn wraz z typem danych i ograniczeniami (NULLS itp.). Dzięki.Tabele tabel T-SQL, kolumny

+3

Ha Czy próbowałeś czegoś? –

+2

Spójrz na widoki 'INFORMATION_SCHEMA' lub' sysobjects', 'syscolumns' itd. –

Odpowiedz

43

Proszę sprawdzić information schema.

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

Dzięki Tim Doceniam to. Czy istnieje sposób dodania do bazy danych, do której są przypisane tabele? Widzę, że katalog jest mistrzem. – user1804387

+0

'użyj MyDatabaseName;', następnie zapytanie. [MSDN: Wybór bazy danych] (http://msdn.microsoft.com/en-us/library/ms180770.aspx). Alternatywnie, dodaj nazwę bazy do klauzuli 'from' w normalnej [4-częściowej modzie] (http://msdn.microsoft.com/en-us/library/ms177563.aspx) (dodałem to do odpowiedzi). –

+0

Właśnie to znalazłem. Dzięki jeszcze raz – user1804387

10

Wiele sposobów na zrobienie tego. Poniżej przedstawiamy kilka sposobów, które można wymienić:

Wariant 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 

Opcja 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) 

Wariant 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