如何知道一行是否在其他表上有外键

时间:2013-08-21 02:38:42

标签: sql-server sql-server-2008 foreign-key-relationship

嗨,大家好我一直在寻找和尝试没有运气的解决方案关于我的两个表在ms sql 2008 r2我的表格如下:

table 1
pk personid varchar - i manually insert here from GUID
fname varchar
mname varchar
lname varchar
qualifier varchar

table 2
pk id - increment by 1
fk personid varchar
salary int
deductions int
salary_month int
salary_year int

现在我的目标是知道哪个条目在另一个表上有外键,如果不是我想删除它

我真的需要一些帮助,我已经尝试了几个星期

2 个答案:

答案 0 :(得分:0)

也许,你想要这个吗?

SELECT *
FROM table1 t1
WHERE NOT EXISTS (SELECT * FROM table2 t2 WHERE t2.personid=t1.personid)

答案 1 :(得分:-1)

这是一个查询,它将为您提供数据库中存在的所有外键的列表。

select FK.name as [Foreign_Key_Name], T.name as [Referenced_Table], T2.name as [Parent_Table]
from sys.foreign_key_columns FKC
inner join sys.tables T on FKC.referenced_object_id = T.object_id
inner join sys.tables T2 on FKC.parent_object_id = T2.object_id
inner join sys.foreign_keys FK on FKC.constraint_object_id = FK.object_id

如果您有一些像外键一样使用的列,但数据库中没有实际的FK对象,那么您可以尝试这样的事情

select *
from table1 T1
inner join table2 T2 on T1.ColumnX = T2.ColumnY

如果查询返回的行数很多,那么这两列可能属于FK关系。