SQL插入两个表的问题

4
我正在使用存储过程将数据插入到数据库中,当数据被插入时,它会自动获得一个身份识别的 ID,并且它也是表的主键。我还需要将数据插入到第二个表中,其中该 ID 是需要插入的列之一。但是,如果 ID 还没有被创建,那么我想知道你们如何解决这个问题。我需要在用户提交表单后将其插入到文档记录用户创建的基本表格中。这可能吗?我正在使用 Microsoft SQL Server 2005。

谢谢

4个回答

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 可以胜任。

这篇文章讲解了它们的区别,值得一读。


2

使用输出语句来获取第一次插入操作的id值,并在第二次插入操作中使用该值。


0

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


@@identity在触发器存在时存在严重问题,可能会在高使用系统中出现查询相互中断的情况。 - Jody
我让出答案并进行了编辑。个人而言,我避免使用触发器,因为它们包含的业务逻辑在应用程序层更容易开发、测试和维护。但是,在某些情况下,它们仍然很有用,所以你们是正确的。 - KeithS

0

您可以使用SCOPE_IDENTITY()获取新插入的身份标识


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接