2017-06-05 44 views
1

我正在查找可以通過特定數據庫上的指定鍵/鍵名稱檢索所有表的查詢。 事情是這樣的:查找數據庫中的所有表按主鍵

SELECT table_name 
FROM information_Schema.columns 
WHERE column_name='ID_UNICO' 
AND Constraint_Type = 'PRIMARY KEY' 

我一直在尋找,我能找到的最好的是:

SELECT Col.Column_Name from 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab, 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col 
WHERE 
    Col.Constraint_Name = Tab.Constraint_Name 
    AND Col.Table_Name = Tab.Table_Name 
    AND Constraint_Type = 'PRIMARY KEY' 
    AND Col.Table_Name = '<your table name>' 

這個檢索特定表的PK的,我想找到table_name的BY PK名稱。

SELECT table_name 
FROM information_Schema.columns 
WHERE column_name='ID_UNICO' 
and ordinal_position = 1; 

也發現了這個,但是這給了我表中的第一列,它不能保證我它是PK。

找不到任何重複。

回答

1

您可以使用此查詢。將「YOUR_COLUMN_NAME」替換爲您的主鍵列名稱。

SELECT Table_Name 
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_SCHEMA + '.' + QUOTENAME(CONSTRAINT_NAME)), 'IsPrimaryKey') = 1 
and COLUMN_NAME ='YOUR_COLUMN_NAME' 
+0

謝謝你的幫助,簡單又簡單!必須將其設置爲最佳答案,因爲它實際上較不復雜 –

+0

不客氣!我很樂意提供幫助。 –

2

這會適合你嗎?

DECLARE @ColName AS VARCHAR(MAX) 
SET @ColName = 'CourseId' 
SELECT 
    TABLE_NAME 
FROM 
    INFORMATION_SCHEMA.COLUMNS 
WHERE 
    COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1 
    AND COLUMN_NAME = @ColName 
+0

謝謝你的工作原理像預期的一樣! –

1

在這裏你去,加入到TABLE_CONSTRAINTS到CONSTRAINT_COLUMN_USAGE約束名扎到列然後返回你的TABLE_NAME:

SELECT CCU.COLUMN_NAME, 
     CONS.TABLE_NAME 
FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CCU 
     JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS CONS 
     ON CONS.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME 
WHERE CONS.CONSTRAINT_TYPE = 'PRIMARY KEY' 
     AND CCU.COLUMN_NAME = 'ID_UNICO' 
+0

謝謝你的好解決方案! –

相關問題