2016-06-17 5 views
1

データベースのバックエンドを使用してアプリケーションを作成していますが、SQLを使用してすべての列名とそのテーブルを調べる必要があります。私はあなたがsys.columnssys.tables、およびsys.databasesを照会することができます知っているが、私がやりたいことを以下に結果のようなもの(基本的にDBからすべての列とテーブルを表示する)を取得するために、すべてのそれらを結合です:私は「データベースanmeのsys.columnsとsys.tablesに参加

+-----------+------------+ 
| Tablename | columnname | 
+-----------+------------+ 
| Table1 | Id   | 
| Table1 | Name  | 
| Table1 | Owner  | 
| Table2 | Id   | 
| Table2 | Name  | 
| Table2 | True  | 
+-----------+------------+ 

をsysスキーマでよく見えましたが、sys.columnsまたはsys.tablesに親の参照が見つかりません。

答えて

8

通常、sys.columnsまたはsys.tables(または任意のシステムテーブル)を直接照会する必要はありません。 INFORMATION_SCHEMAビューを使用する必要があります。これらのビューは、リリースごとに変更される可能性のあるシステムテーブルを照会するANSIの標準的な方法です。 INFORMATION_SCHEMAビューは、少なくとも壊れた方法では変更されません。もちろん

SELECT COLUMN_NAME,* 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = <TableName> AND TABLE_SCHEMA= <SchemaName> 

は、WHERE句は、ここではオプションであり、すべてのテーブルなど

9

ランディMinderのの答えが最も正しいものであるのすべての列を見るために省略することができます。しかし、sys.columnsとsys.tablesを続行したい場合、object_idでそれらを結合します。

select tab.name, col.name 
from sys.columns col 
inner join sys.tables tab 
    on col.object_id = tab.object_id 

あなたはsys.columnsテーブル、それを自己のテーブル名を取得するためにこれを使用することができます。

select object_name(object_id),name 
from sys.columns 
関連する問題