2011-03-29 71 views
4

我正在使用存储过程将数据插入到数据库中,当它插入时它会自动给出一个ID,这是一个标识,它也是表的主键。我还需要将数据插入到第二个表中,该表的ID是需要插入的列之一。但它的ID尚未创建,所以我想知道你们如何解决这个问题。我需要它,所以当他们提交我的表单时,它会插入用户,然后我需要将它添加到基本上会记录该用户被创建的表中。这可能吗。?我使用的是Microsoft SQL Server 2005中SQL插入到两个表中问题

感谢

+2

您使用的是什么RDBMS? – 2011-03-29 15:04:00

回答

5
INSERT INTO Table1 (SomeColumn) Values ('SomeValue') 

DECLARE @NewIdent int 
SELECT @NewIdent = SCOPE_IDENTITY() 

INSERT INTO Table2 (SomeColumn, T1ID) VALUES ('SomeValue',@NewIDent) 

你可以看一下什么@@ IDENTITY,SCOPE_IDENTITY()和IDENT_CURRENT,看看哪一个会满足您的需求最好的。我怀疑SCOPE_IDENTITY会完成这项工作。

Here is a good article他们都在做什么。

2

使用输出子句从第一插入获取ID和使用在矿井二次插入该值。

0

检查第一次插入后scope_identity()系统函数的结果;它将包含先前插入的记录的ID(假定ID是使用标识列自动生成的)。正如评论中所述,这比使用@@身份更好,因为@@身份可能不准确,或者当数据库中存在触发器时或在高流量的情况下可能会被抢占时,会导致问题。

+0

@@ identity在存在触发器时有严重问题,并且可能在查询容易相互中断的高使用率系统中。 – Jody 2011-03-29 15:36:49

+0

我给;回答编辑。就我个人而言,我避免了触发器,因为它们包含的业务逻辑在应用程序层中更容易开发,测试和维护。但是,它们仍然有用,在这种情况下,你们是对的。 – KeithS 2011-03-29 21:33:42

0

U可以使用SCOPE_IDENTITY()插入新身份()