2012-01-18 48 views
0

我有一个数据库,为了简单起见,我们可以说它有两个表。一个是Employee,另一个是EmployeeType。在数据库图表我试图建立两个表的关系,但它给了我以下错误....SQL关系错误

'EmployeeType (HumanResources)' table saved successfully 
'Employee (HumanResources)' table 
- Unable to create relationship 'FK_Employee_EmployeeType'. 
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_Employee_EmployeeType". The conflict occurred in database "TheDB", table "HumanResources.EmployeeType", column 'iID'. 

我不知道它是什么问题。请帮忙...

+5

听起来好像你已经定义了FK。 – 2012-01-18 14:28:18

+1

你有没有读错误?这似乎很清楚。 – Oded 2012-01-18 14:29:05

+1

这看起来像来自SSMS生成的查询的错误。 – Yuck 2012-01-18 14:35:16

回答

4

哎哟,这么多downvotes。至少他打扰发布错误消息。正如丹尼尔A.怀特上面所说的,你可能已经有了你想要创造的外键。你的标签说你正在使用SQL Server 2008,所以我会假设你是Microsoft SQL Server Management Studio。如果是这种情况,我曾经犯过一个错误(有时候还是这样做),我是通过右键单击表的Design视图中的任意一列来创建一个新的关系,我想创建一个外键,并击中关系。在出现的外键关系菜单中,我点击底部的“添加”,然后展开“表格和列说明”部分。然后,我点击“表格和列说明”旁边的“...”,您可以选择要关联的列。

现在我偶尔遇到的问题是,如果你没有在这里确定这种关系,你就是为这种情况设置自己的。原因是,当你点击“添加”几步后,你已经在这个表上创建了一个外键。即使您取消并关闭所有内容,该表仍保留该外键。如果你在这方面进行实验,你可能已经意外创造了这种关系,那时你就不知道了。

我意识到我第一次开始时经常犯这个错误,因为我在开始使用SQL Server 2008一年后回顾我的第一个项目,并且外键关系很有趣,因为我有一吨的外键条目指向每个表格中的哪里,我显然只是在学习时才进行实验。

另一件事,只是为了覆盖更多的基础,是你提到你在数据库图表视图中这样做。不要以为这有什么问题,但我发现有时候通过GUI来做事情,它可能会有些不礼貌。因此,我的意思是,有时候我会想做一个非常小小的改变,但是GUI会告诉我,在桌子制作完成后我不能做那种改变。但是,如果我只是通过输入查询来完成我想要做的事情,那么它运行得很好。

尝试查看是否具有所需功能的最终测试是简单地尝试放入一个会违反外键约束的记录。如果它通过,那么这种关系就不存在或者设置不正确。如果失败了,那么你知道你已经有了你想要的东西。

我认为你有一些downvotes,因为这不是一个非常复杂的问题/应该通常自己解决,特别是与谷歌。既然不是这样,但是你无论如何也不愿意发帖,我假设你对此有点新鲜,所以我只是想抛弃我作为新手的建议。不要让降价让你失望,也许下次再问一个更具体的问题,而不是“什么是错的?”。例如,“这个错误似乎告诉我钥匙已经存在,谁能告诉我如何检查和看看已经存在的关系?我不记得建立这种关系,这怎么会发生?”等等。

+2

谢谢。这真的有帮助。在发布新问题时,我一定会记住你的建议。 – Cancer 2012-01-20 06:13:17

1

一个简单的答案:你的表中有数据会破坏这种关系,所以你不能创建关系。

在这种情况下,检查Employee表并查找EmployeeType(EmployeeTypeId?)的id为NULL或非法(不在EmployeeType表中找到)的行。修复这些行,关系将保存成功。