我可以用這個查詢得到一個表的列在SQL Server:如何使用Sql Server 2008查找表的外鍵?
select * from information_schema.columns where table_name = 'MyTable'
但如何找到與該表相關聯的外鍵列?
我可以用這個查詢得到一個表的列在SQL Server:如何使用Sql Server 2008查找表的外鍵?
select * from information_schema.columns where table_name = 'MyTable'
但如何找到與該表相關聯的外鍵列?
它在裏面information_schema.table_constraints
。
編輯:
等待,我認爲information_schema.key_column_usage
更好:
select * from information_schema.key_column_usage where table_name = '...'
,然後如果你需要確保它確實是一個外鍵,使用你得到了約束名稱查詢TABLE_CONSTRAINTS從上面:
select * from information_schema.table_constraints where constraint_name = '...'
這將找到給定表上的所有FK約束。只需將'table_name'
設置爲您的表格名稱即可。查詢如下:
DECLARE @TABLENAME VARCHAR(100);
SET @TABLENAME='table_name';
SELECT
K_Table = FK.TABLE_NAME,
FK_Column = CU.COLUMN_NAME,
PK_Table = PK.TABLE_NAME,
PK_Column = PT.COLUMN_NAME,
Constraint_Name = C.CONSTRAINT_NAME
FROM
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK
ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (
SELECT
i1.TABLE_NAME,
i2.COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2
ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE
i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT
ON PT.TABLE_NAME = PK.TABLE_NAME
WHERE [email protected]
非常感謝,但我如何確定哪些列是與每列的關係。 –
@niloo我編輯了我的答案,請再讀一遍 –
Tjahono:非常感謝。 –