簡體   English   中英

使用TSQL如何確定哪一個化合物外鍵的列對應於化合物主/唯一鍵的哪一列?

[英]Using tsql how to determine which column of a compound foreign key corresponds to which column of a compound primary/unique key?

我想放一個sql查詢,該查詢將向我顯示復合外鍵的哪些列對應於其主鍵/唯一鍵的哪些列。

例如,如果數據庫具有

CREATE TABLE TA
(
    B int,
    C int
)

ALTER TABLE TA ADD CONSTRAINT [UK_CB] UNIQUE NONCLUSTERED 
(
    C ASC,
    B ASC
)

CREATE TABLE TB
(
    D int,
    E int
)

ALTER TABLE TB ADD CONSTRAINT [FK_TA] FOREIGN KEY (D, E) REFERENCES TA(C, B)

然后我想查詢返回

| Pk/Uk | PK/UK Column |  FK   | FK Column |
--------------------------------------------
| UK_CB |      C       | FK_TA |     D     |
| UK_CB |      B       | FK_TA |     E     |

如果可能,我寧願僅使用INFORMATION_SCHEMA視圖。

我知道INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE,但這只為我提供了特定約束中的列。

我可以加入INFORMATION_SCHEMA.COLUMNS並以順序位置進行操作,但是這錯誤地假設關鍵引用是按順序排列的。

有沒有一種查詢數據庫以獲取復合鍵之間的列對應關系的方法?

我在INFORMATION_SCHEMA視圖中找不到經過驗證的列順序。 但是,如果可以使用系統目錄視圖(而不是INFORMATION_SCHEMA視圖),則可以執行以下操作(這是一個sql小提琴 )。 我看不到將其與pk / uk關聯的直接方法,但是您可以在pk / uk表中找到列:

SELECT
  fk.name as constraint_name,
  sfkc.constraint_column_id,
  sfkc.parent_column_id,
  fkt.name as fk_table,
  fkc.name as fk_column,
  sfkc.referenced_column_id,
  pkt.name as pk_table,
  pkc.name as pk_column
FROM sys.foreign_keys AS fk
JOIN sys.foreign_key_columns AS sfkc
  ON fk.object_id = sfkc.constraint_object_id
JOIN sys.tables AS fkt
  ON  sfkc.parent_object_id = fkt.object_id
JOIN sys.columns as fkc
  ON fkt.object_id = fkc.object_id
 AND sfkc.parent_column_id = fkc.column_id
JOIN sys.tables AS pkt
  ON sfkc.referenced_object_id = pkt.object_id
JOIN sys.columns as pkc
  ON pkt.object_id = pkc.object_id
 AND sfkc.referenced_column_id = pkc.column_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM