我目前使用...如何確定列是否在其表的主鍵中? (SQL Server)的
select Table_Name, Column_name, data_type, is_Nullable
from information_Schema.Columns
...,以確定有關用於生成數據訪問層的目的,給定的數據庫列的信息。
從哪裏可以檢索有關這些列是否是他們表的主鍵參與者的信息?
我目前使用...如何確定列是否在其表的主鍵中? (SQL Server)的
select Table_Name, Column_name, data_type, is_Nullable
from information_Schema.Columns
...,以確定有關用於生成數據訪問層的目的,給定的數據庫列的信息。
從哪裏可以檢索有關這些列是否是他們表的主鍵參與者的信息?
這裏有一種方法(與您正在搜索 列名替換「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';
同樣的,下面就給大家介紹所有的表及其密鑰的信息,而不是有關特定列的信息。通過這種方式,您可以確保您擁有所有感興趣的列,並知道他們參與的內容。爲了查看所有的鍵(主鍵,外鍵,唯一鍵),請註釋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
爲了您的需要,使用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]
好的答案,但你應該在WHERE子句中添加TABLE_NAME以確保我們從正確的表中拉PK,否則它將加載所有表的PK,而完全外連接期間多個表的PK字段名稱相同。 – 2016-06-01 21:33:44
您還應該在where子句中包含感興趣的表名。否則,如果有一個其他表的主鍵與您感興趣的表的主鍵列名相同,則會得到該結果。 – Markus 2017-10-26 08:52:49