我们有一个遗留的SQLServer数据库,几乎没有指定的外键约束,即使有很多外键。有没有办法使用服务器日志来识别未指定的外键?
答案 0 :(得分:0)
如果未指定外键约束,那么您拥有的只是表的集合,服务器日志不会告诉您任何内容。
您所能做的只是从数据库中获取一些线索,例如外键可能相当明显,即OrderDetails表上的PartID。您可以检查视图,存储过程和其他服务器代码以查找JOIN,但并非所有这些都表示FK。如果系统处于活动状态且处于活动状态,那么您还可以针对相同的联接对数据库运行查询。
一旦你确定了一些潜在的FK,你可以看到这些值是否都匹配使用完整的外连接,如下所示:
SELECT *
FROM Table_1 AS t1
LEFT OUTER JOIN Table_2 AS t2
ON t1.CandidateID = t2.CandidateID
WHERE t1.CandidateID IS NULL OR t2.t1.CandidateID IS NULL
如果表中有数据并且这不会返回任何行,那么你可能会有一个FK,如果它返回一些,那么你可能仍然会有一些错过删除等等。