2016-11-20 3 views
0

Gibt es eine Möglichkeit, alle Fremdschlüssel zusammen mit ihren Beziehungstypen (1 zu 1 oder 1 zu viele) aufzulisten in db in SQL Server? Ich weiß über die gespeicherte Prozedur EXEC sp_fkeys, aber es zeigt nicht den Beziehungstyp des Fremdschlüssels.SQL Server: Alle Fremdschlüssel mit Eins-zu-Eins- und Eins-zu-viele-Beziehungen abrufen

Edit: Ich habe auch den folgenden Ansatz versucht und ich glaube, ich kann es in einer Weise ändern, dass ich auch die Beziehungstypen verstehen kann, so würde jeder Vorschlag geschätzt werden.

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

Haben Sie eine Eins-zu-Eins-Tabelle bedeuten und One-to-many-Tabelle? – Aruna

Antwort

0

Sie können die folgenden JOINS und PARTITION BY verwenden, um dies zu erreichen,

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 
Verwandte Themen