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.
ありがとう
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.
ありがとう
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;
こちらをご覧ください。
次のようなものを使用できます。
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
しかしもちろん、 との間に複数の外部キーを持つことができ、それらは「双方向」に行くことができます。TableA
TableB
ParentTable = TableA
ReferencedTable = TableB
ParentTable = TableB
ReferencedTable = TableA
したがって、2 つのテーブル間のすべての外部キーを見つけるには、次のようにします。
WHERE
(ParentTable = 'TableA' AND ReferencedTable = 'TableB') OR
(ParentTable = 'TableB' AND ReferencedTable = 'TableA')
はい、必要に応じて、これを関数にまとめることができますが、それを行うことはお勧めしません。
これを行うにはいくつかの方法があります。以下を使用できます。
SQL Server Management Studio でダイアグラムを作成して、接続/外部キーを表示します (ただし、関数ではありません)。
を使用してクエリを実行できますINFORMATION_SCHEMA
。これにより、システム データベースから取得されたすべてのメタデータを表示できます。役立つチュートリアルへのリンクは次のとおりです: INFORMATION_SCHEMA チュートリアル
さらに、同様の質問が次の StackExchange 記事で取り上げられました。ここにリンクがあります: 同様の StackOverflow 投稿へのリンク