2008-10-21 57 views

回答

30

這裏有一種方法(與您正在搜索 列名替換「KEYCOL」):

SELECT K.TABLE_NAME, 
K.COLUMN_NAME, 
K.CONSTRAINT_NAME 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C 
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K 
ON C.TABLE_NAME = K.TABLE_NAME 
AND C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG 
AND C.CONSTRAINT_SCHEMA = K.CONSTRAINT_SCHEMA 
AND C.CONSTRAINT_NAME = K.CONSTRAINT_NAME 
WHERE C.CONSTRAINT_TYPE = 'PRIMARY KEY' 
AND K.COLUMN_NAME = 'keycol'; 
+0

您還應該在where子句中包含感興趣的表名。否則,如果有一個其他表的主鍵與您感興趣的表的主鍵列名相同,則會得到該結果。 – Markus 2017-10-26 08:52:49

6

同樣的,下面就給大家介紹所有的表及其密鑰的信息,而不是有關特定列的信息。通過這種方式,您可以確保您擁有所有感興趣的列,並知道他們參與的內容。爲了查看所有的鍵(主鍵,外鍵,唯一鍵),請註釋WHERE子句。

SELECT K.TABLE_NAME, C.CONSTRAINT_TYPE, K.COLUMN_NAME, K.CONSTRAINT_NAME 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C 
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K 
ON C.TABLE_NAME = K.TABLE_NAME 
AND C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG 
AND C.CONSTRAINT_SCHEMA = K.CONSTRAINT_SCHEMA 
AND C.CONSTRAINT_NAME = K.CONSTRAINT_NAME 
WHERE C.CONSTRAINT_TYPE = 'PRIMARY KEY' 
ORDER BY K.TABLE_NAME, C.CONSTRAINT_TYPE, K.CONSTRAINT_NAME 
3

爲了您的需要,使用INFORMATION_SCHEMA.COLUMNS和INFORMATION_SCHEMA.KEY_COLUMN_USAGE完全外部聯接。在select語句中,添加INFORMATION_SCHEMA.KEY_COLUMN_USAGE中的CONSTRAINT_NAME列,它將爲您提供null或鍵名。

select C.Table_Name, C.Column_name, data_type, is_Nullable, U.CONSTRAINT_NAME 
from information_Schema.Columns C FULL OUTER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE U ON C.COLUMN_NAME = U.COLUMN_NAME 
WHERE [email protected] 
+0

好的答案,但你應該在WHERE子句中添加TABLE_NAME以確保我們從正確的表中拉PK,否則它將加載所有表的PK,而完全外連接期間多個表的PK字段名稱相同。 – 2016-06-01 21:33:44

相關問題