2016-11-20 31 views
0

すべての外部キーをリレーションシップタイプ(1対1または1対多)と共にリストする方法はありますか SQL Serverのdb?私はEXEC sp_fkeysストアドプロシージャについて知っていますが、外部キーの関係タイプは表示されません。SQL Server:1対1および1対多の関係を持つすべての外部キーを取得

編集: また、以下のアプローチを試してみましたが、関係タイプも理解できる方法で変更できると思いますので、ご意見をいただければ幸いです。

SELECT * 
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC 
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KF ON RC.CONSTRAINT_NAME =   KF.CONSTRAINT_NAME 
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KP ON RC.UNIQUE_CONSTRAINT_NAME = KP.CONSTRAINT_NAME 
+0

、これを達成するためにJOINSPARTITION BY以下使用することができますか? – Aruna

答えて

0

あなたは1対1のテーブルと1対多のテーブルを意味するか

SELECT 
    PKTableOwner, PKTableName, PKColumnName, FKTableOwner, FKTableName, FKColumnName, 
    (
     CASE 
      WHEN [Count] > 1 
      THEN '1 to Many' 
      ELSE '1 to 1' 
     END 
    ) AS RelationshipType 
FROM (
    SELECT 
     CONVERT(SYSNAME, SCHEMA_NAME(OP.SCHEMA_ID)) AS PKTableOwner, 
     CONVERT(SYSNAME, OP.NAME) AS PKTableName, 
     CONVERT(SYSNAME, CP.NAME) AS PKColumnName, 
     CONVERT(SYSNAME, SCHEMA_NAME(OFK.SCHEMA_ID)) AS FKTableOwner, 
     CONVERT(SYSNAME, OFK.NAME) AS FKTableName, 
     CONVERT(SYSNAME, CFK.NAME) AS FKColumnName, 
     COUNT(*) OVER (PARTITION BY OP.SCHEMA_ID, OP.NAME, CP.NAME) AS [Count] 
    FROM 
     SYS.FOREIGN_KEYS F 
    INNER JOIN 
     SYS.FOREIGN_KEY_COLUMNS FC 
     ON 
     F.OBJECT_ID = FC.CONSTRAINT_OBJECT_ID 
    INNER JOIN 
     SYS.OBJECTS OP 
     ON 
     OP.OBJECT_ID = F.REFERENCED_OBJECT_ID 
    INNER JOIN 
     SYS.COLUMNS CP 
     ON 
     CP.OBJECT_ID = F.REFERENCED_OBJECT_ID 
     AND 
     CP.COLUMN_ID = FC.REFERENCED_COLUMN_ID 
    INNER JOIN 
     SYS.OBJECTS OFK 
     ON 
     OFK.OBJECT_ID = F.PARENT_OBJECT_ID 
    INNER JOIN 
     SYS.COLUMNS CFK 
     ON 
     CFK.OBJECT_ID = F.PARENT_OBJECT_ID 
     AND 
     CFK.COLUMN_ID = FC.PARENT_COLUMN_ID) F 
関連する問題