2017-02-21 8 views
0

SQL Serverのデータベース内の各テーブルの完全なメタデータを取得する必要があります。SQL Serverデータベースの完全なメタデータを取得する方法

私はPKとFKの情報を取得していない午前

SELECT * 
FROM INFORMATION_SCHEMA.COLUMNS 

を使用しています。他のメタデータ列と一緒にPKとFK情報を取得するにはどうすればよいですか?

+0

あなたはクエリとして(SQLの特定の必要性)、またはあなたが書いているアプリケーション(C#など)からデータにアクセスする必要がありますか? –

+0

情報スキーマにはさらに多くのオブジェクトがあります。あなたもそれらを使用する必要があります。 – ajeh

+1

情報を使って何をしようとしているのか説明できる場合は、正しい方向を指すことができます。投稿されたとおり、あなたが必要とするものは明らかではありません。 –

答えて

0
SELECT c.* --c.TABLE_NAME, c.COLUMN_NAME,c.DATA_TYPE, c.is_nullable 
      ,CASE WHEN pk.COLUMN_NAME IS NOT NULL THEN 'PRIMARY KEY' ELSE '' END AS KeyType 
      ,CASE WHEN fk.COLUMN_NAME IS NOT NULL THEN 'FOREIGN KEY' ELSE '' END AS KeyType,x1.ReferenceTableName 
      ,x1.ReferenceColumnName 
FROM INFORMATION_SCHEMA.COLUMNS c 
LEFT JOIN (
      SELECT ku.TABLE_CATALOG,ku.TABLE_SCHEMA,ku.TABLE_NAME,ku.COLUMN_NAME 
      FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc 
      INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS ku 
       ON tc.CONSTRAINT_TYPE = 'PRIMARY KEY' 
       AND tc.CONSTRAINT_NAME = ku.CONSTRAINT_NAME 
     ) pk 
     ON c.TABLE_CATALOG = pk.TABLE_CATALOG 
      AND c.TABLE_SCHEMA = pk.TABLE_SCHEMA 
      AND c.TABLE_NAME = pk.TABLE_NAME 
      AND c.COLUMN_NAME = pk.COLUMN_NAME 
LEFT JOIN (
      SELECT ku.TABLE_CATALOG,ku.TABLE_SCHEMA,ku.TABLE_NAME,ku.COLUMN_NAME 
      FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc 
      INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS ku 
       ON tc.CONSTRAINT_TYPE = 'FOREIGN KEY' 
       AND tc.CONSTRAINT_NAME = ku.CONSTRAINT_NAME 
     ) fk 
     ON c.TABLE_CATALOG = fk.TABLE_CATALOG 
      AND c.TABLE_SCHEMA = fk.TABLE_SCHEMA 
      AND c.TABLE_NAME = fk.TABLE_NAME 
      AND c.COLUMN_NAME = fk.COLUMN_NAME 
LEFT JOIN(
SELECT f.name AS ForeignKey, 
SCHEMA_NAME(f.SCHEMA_ID) SchemaName, 
OBJECT_NAME(f.parent_object_id) AS TableName, 
COL_NAME(fc.parent_object_id,fc.parent_column_id) AS ColumnName, 
SCHEMA_NAME(o.SCHEMA_ID) ReferenceSchemaName, 
OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName, 
COL_NAME(fc.referenced_object_id,fc.referenced_column_id) AS ReferenceColumnName 
FROM sys.foreign_keys AS f 
INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id 
INNER JOIN sys.objects AS o ON o.OBJECT_ID = fc.referenced_object_id) x1 
ON c.TABLE_NAME = x1.TableName 
AND c.COLUMN_NAME = x1.ColumnName 
ORDER BY c.TABLE_NAME, c.ORDINAL_POSITION 
関連する問題