0

データベース内のすべてのテーブルをデータセットに入力する必要があり、各データテーブルには次の列が必要です

  • テーブル名
  • 列名
  • Nullable、
  • データ・タイプ
  • 最大長
  • IsprimaryKey
  • IsForeignKey

私は次のことを行いましたが、これによって主キーと外部キーが得られませんでした

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS C      
WHERE C.TABLE_SCHEMA='dbo' 
ORDER BY C.TABLE_NAME

ジョイントを追加しようとしましたが、間違った結果が得られました

SELECT C.TABLE_SCHEMA,
    C.TABLE_NAME,
    C.COLUMN_NAME,
    C.IS_NULLABLE,
    C.DATA_TYPE,
    C.CHARACTER_MAXIMUM_LENGTH,
    TC.CONSTRAINT_TYPE
FROM INFORMATION_SCHEMA.COLUMNS C
    INNER JOIN  INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC 
        ON c.TABLE_NAME=TC.TABLE_NAME
WHERE C.TABLE_SCHEMA='dbo' 
ORDER BY C.TABLE_NAME

外部キーのプライマリである場合を含め、テーブルに関する上記のすべての情報を返すにはどうすればよいですか?

どうもありがとう

4

1 に答える 1

0

私があなたを正しければ:

1.あなたはする必要がありますLEFT join INFORMATION_SCHEMA.TABLE_CONSTRAINTS

2.case

以下のクエリを試して、私が正しいかどうか教えてください。

SELECT 
Distinct
C.TABLE_SCHEMA,
C.TABLE_NAME,
C.COLUMN_NAME,
C.IS_NULLABLE,
C.DATA_TYPE,
C.CHARACTER_MAXIMUM_LENGTH,
CASE WHEN TC.CONSTRAINT_TYPE='PRIMARY KEY' THEN 'Yes' Else 'No' end as ISprimaryKey,
CASE WHEN TC.CONSTRAINT_TYPE='FOREIGN KEY' THEN 'Yes' Else 'No' end as IsForeignKey
FROM INFORMATION_SCHEMA.COLUMNS C with(nolock)
LEFT join  INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC with(nolock) on c.TABLE_NAME=TC.TABLE_NAME
WHERE C.TABLE_SCHEMA='dbo' 
ORDER BY C.TABLE_NAME
于 2013-05-31T08:25:51.140 に答える