2009-09-03 24 views
5

テーブル内のプライマリ&の外部キーはどのように見えますか?SQL Server 2008:テーブルのプライマリ/外部キーを確認しますか?

編集:すべての応答ありがとうございます。私はそれを行うSQLクエリを探していた。今私はDBのすべてのテーブルを一覧表示して列を表示できるツールを作成して遊んでいます。私はキーのどれがプライマリキーでも表示したいと思います。

これは私が表カタログ読み出す方法です:

const string sqlSelectTable = "SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE " + 
             "FROM INFORMATION_SCHEMA.TABLES " + 
             "WHERE TABLE_TYPE = 'BASE TABLE' " + 
             "ORDER BY TABLE_TYPE,TABLE_NAME"; 

をそして、これは私が列に関するに関する情報を取得する方法である:

const string sqlSelectTable = 
      "SELECT  COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH " + 
      "FROM   INFORMATION_SCHEMA.COLUMNS " + 
      "WHERE  (TABLE_NAME = @TABLE_NAME) " + 
      "ORDER BY ORDINAL_POSITION"; 

私はインナー-Joinを作成する必要がありますので、どの列が主キーであるかを確認します。

乾杯お待ちください

答えて

11

、あなたはこのクエリを使用することができます。

SELECT 
    kc.name, 
    c.NAME 
FROM 
    sys.key_constraints kc 
INNER JOIN 
    sys.index_columns ic ON kc.parent_object_id = ic.object_id 
INNER JOIN 
    sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id 
WHERE 
    kc.type = 'PK' 

と外部キーについては、このクエリで必要な情報を取得する必要があります:

SELECT 
    OBJECT_NAME(parent_object_id) 'Parent table', 
    c.NAME 'Parent column name', 
    OBJECT_NAME(referenced_object_id) 'Referenced table', 
    cref.NAME 'Referenced column name' 
FROM 
    sys.foreign_key_columns fkc 
INNER JOIN 
    sys.columns c 
     ON fkc.parent_column_id = c.column_id 
      AND fkc.parent_object_id = c.object_id 
INNER JOIN 
    sys.columns cref 
     ON fkc.referenced_column_id = cref.column_id 
      AND fkc.referenced_object_id = cref.object_id 

マルク・

+0

のNOのあなたのテーブル名を書き除外する。これは、作成したインデックスを返します。 – Craig

+0

@Craig:クエリ#1 **のみ**は主キーを返します - クエリ#2は**のみを返します**外部キー - または何を取得しますか? –

3

Management Studioで、テーブルを展開して[列]項目を展開します。主キーには、その隣にキーアイコンがあります。

外部キーを表示するには、Constraints項目を展開します。

1

:各テーブルの主キーについて

SELECT 
    Table_Name as [TableName], 
    Column_Name as [ColumnName], 
    Constraint_Name as [Constraint], 
    Table_Schema as [Schema] 
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
ORDER BY 
    [TableName], 
    [ColumnName] 

(あなたがtableNameのことで、その後フィルタリングすることができます)

1
SELECT 
OBJECT_NAME(parent_object_id) 'Parent table', 
c.NAME 'Parent column name', 
OBJECT_NAME(referenced_object_id) 'Referenced table', 
cref.NAME 'Referenced column name' 
FROM 
sys.foreign_key_columns fkc 
INNER JOIN 
sys.columns c 
    ON fkc.parent_column_id = c.column_id 
     AND fkc.parent_object_id = c.object_id 
INNER JOIN 
sys.columns cref 
    ON fkc.referenced_column_id = cref.column_id 
     AND fkc.referenced_object_id = cref.object_id where OBJECT_NAME(parent_object_id) = 'tablename' 

あなたはすべてのテーブルの外部キー関係を取得したい場合は、他のwhere節が代わりに動作しませんtablename

関連する問題