2010-08-06 87 views
0

我有两个表 资产员工SQL数据库插入数据与外键约束

由assetid-PK EMPID-PK EMPID-FK 现在,我有一个表格来填充资产表,但它不能因为外键约束。

该怎么办?

THX Tk的

+0

我们可以使用通用格式的Insert语句吗? – websch01ar 2010-08-06 17:30:27

回答

3

外键一个很好的理由创造 - 防止孤儿排在最低限度。创建相应的父级,然后将适当的值用作子表的外键值。

0

您应该将此更新视为一系列SQL语句,而不只是一条语句。您将按照依赖性的顺序处理语句,请参阅示例。

Asset 
    PK AssetID 
    AssetName 
    FK EmployeeID 
    etc... 

Employee 
    PK EmployeeID 
    EmployeeName 
    etc... 

如果您想“添加”新资产,您首先需要知道将分配给哪位员工。如果将其分配给新员工,则需要先将其添加。

以下是为名为'Zach'的新员工添加名为'BOOK'的资产的示例。

DECLARE @EmployeeFK AS INT; 

INSERT (EmployeeName) VALUES ('Zach') INTO EMPLOYEE; 
SELECT @EmployeeFK = @@IDENTITY; 
INSERT (AssetName, EmployeeID) VALUES ('BOOK',@EmployeeFK) INTO ASSET; 

上面需要注意的重要的事情,是我们抓住新的身份:分配给“扎克”(又名雇员),所以我们可以使用它,当我们添加新的资产。

+0

谢谢你的回答。这实际上有帮助。 – user413318 2010-09-10 13:08:27

0

如果我正确理解你,你是否试图在坚持数据之前在本地构建数据图?也就是说,在应用程序中创建父记录和子记录并将其全部保存一次?

对此有几种方法。人们采用的一种方法是使用GUID作为数据的唯一标识符。这样您就不需要从数据库获取下一个ID,您可以在本地创建图形并坚持整个过程。长期以来,软件和数据库之间一直存在着这种方法的争论,因为尽管它在许多方面都很有意义(不经常访问数据库,在保持关系之前保持关系,跨系统唯一地标识数据),但事实证明,数据库受到重大打击。

另一种方法是使用ORM来为您处理持久性映射。例如,像NHibernate一样。你会创建你的父对象,而子对象只是属性。他们不会有任何外键和ID的概念,并且它们只是通过相互设置为属性而成为相关代码中的对象(例如具有“评论”对象的通用集合的“博客帖子”对象等)。该图将交给ORM,ORM将使用其对象与持久性之间映射的知识以正确的顺序将其发送到数据库,可能会返回相同的对象但填充了ID号。

或者这不是你要求的吗?说实话,这有点不清楚。

+0

?????? !!!但感谢您的时间.... – user413318 2010-09-10 13:09:30