2013-01-02 131 views
0

假设我有两个表(主键 - >外键),其中主键表中的一条记录对应于外键中的多条记录,所以如果我想为两个主键创建插入页面(例如使用ASP.NET)表和外键表,我怎样才能获得主键值插入外键表? (通常我采取了最大(的PK),但我很好奇,以找到更好的解决方案)处理主键 - 外键表插入?

+1

取决于正在使用的数据库系统。但是'MAX()'通常是一个坏主意,因为它需要'INSERT'和'SELECT'之间的表独占访问(通过序列化事务或者只是交叉手指和希望实现) –

回答

0

我假设你使用SQL Server,因为你提到使用ASP.NET。在多用户系统中使用Max(PK)不是一个好主意,因为最终您最终会得到不正确的主键值。还有一些资源问题需要考虑。一般来说,这种方法应该避免。

有几种方法可以完成你想要做的事情。一种方法是通过存储过程进行插入。用于创建主键行的存储过程将返回新行的Id值,然后可用于插入外键行。但不要使用Max(PK值)。使用SCOPE_IDENTITY()值。这假定你正在为你的PK值使用一个身份类型。你没有说明你实际使用的是什么。

+0

如果他正在使用MySQL,它将是LAST_INSERT_ID()而不是SCOPE_IDENTITY() –