1

SQL Server では、2 つのテーブル間の外部キーを取得するビルドイット機能はありますか?

たとえばTable_A, Table_B

select myfunction ('Table_A', 'Table_B')
-- it should give the column name of its foreign keys, if no any relationship, it return null.

ありがとう

4

3 に答える 3

3
SELECT TABLE_NAME
   , CONSTRAINT_NAME
   , COLUMN_NAME
   , ORDINAL_POSITION
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE CONSTRAINT_NAME IN (
   SELECT CONSTRAINT_NAME
   FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS)
ORDER BY TABLE_NAME, ORDINAL_POSITION;

こちらをご覧ください。

于 2012-06-20T14:07:13.747 に答える
3

次のようなものを使用できます。

SELECT 
    FKName = fk.name,
    ParentTable = tpar.name,
    ParentColumn = colpar.name,
    ReferencedTable = tref.name,
    ReferencedColumn = colref.name
FROM
    sys.foreign_keys fk
INNER JOIN 
    sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id
INNER JOIN 
    sys.tables tpar ON fk.parent_object_id = tpar.object_id
INNER JOIN 
    sys.columns colpar ON fkc.parent_object_id = colpar.object_id AND fkc.parent_column_id = colpar.column_id
INNER JOIN 
    sys.tables tref ON fk.referenced_object_id = tref.object_id
INNER JOIN 
    sys.columns colref ON fkc.referenced_object_id = colref.object_id AND fkc.referenced_column_id = colref.column_id

しかしもちろん、 との間に複数の外部キーを持つことができ、それらは「双方向」に行くことができます。TableATableBParentTable = TableAReferencedTable = TableBParentTable = TableBReferencedTable = TableA

したがって、2 つのテーブル間のすべての外部キーを見つけるには、次のようにします。

WHERE
    (ParentTable = 'TableA' AND ReferencedTable = 'TableB') OR
    (ParentTable = 'TableB' AND ReferencedTable = 'TableA')

はい、必要に応じて、これを関数にまとめることができますが、それを行うことはお勧めしません。

于 2012-06-20T14:23:30.660 に答える
1

これを行うにはいくつかの方法があります。以下を使用できます。

  1. SQL Server Management Studio でダイアグラムを作成して、接続/外部キーを表示します (ただし、関数ではありません)。

  2. を使用してクエリを実行できますINFORMATION_SCHEMA。これにより、システム データベースから取得されたすべてのメタデータを表示できます。役立つチュートリアルへのリンクは次のとおりです: INFORMATION_SCHEMA チュートリアル

さらに、同様の質問が次の StackExchange 記事で取り上げられました。ここにリンクがあります: 同様の StackOverflow 投稿へのリンク

于 2012-06-20T14:10:41.863 に答える