如何将插入行的标识值的第二个表更新到第一个表中

时间:2011-05-22 02:13:15

标签: sql sql-server sql-server-2008

我有以下表结构

CREATE TABLE [dbo].[WorkItem](
    [WorkItemId] [int] IDENTITY(1,1) NOT NULL,
    [WorkItemTypeId] [int] NOT NULL,
    [ActionDate] [datetime] NOT NULL,
    [WorkItemStatusId] [int] NOT NULL,
    [ClosedDate] [datetime] NULL,
)

CREATE TABLE [dbo].[RequirementWorkItem](
    [WorkItemId] [int] NOT NULL,
    [RequirementId] [int] NOT NULL,
)

CREATE TABLE #RequirmentWorkItems
(
    RequirementId int,
    WorkItemTypeId int,
    WorkItemStatusId int,
    ActionDate datetime
)

我使用#RequirmentWorkItems表来创建需求的工作项。然后,我需要将工作项插入WorkItem表,并使用WorkItem表中的标识值在RequirementWorkItem表中创建交叉引用行。

有没有办法在不通过每一行进行游说的情况下这样做?我无法将RequirementId放入WorkItem表中,因为WorkItemTypeId WorkItem可能会链接到Requirement或{{1}或Notice

因此Event实际上有3个外部参照表。或者将WorkItemsRequirementIdNoticeId放在EventId表中会更好,其中1列会有值而其他2会为空?希望这一切都有意义。感谢。

1 个答案:

答案 0 :(得分:3)

您应该阅读MERGE and OUTPUT – the swiss army knife of T-SQL了解更多相关信息。

  

今天我偶然发现了它的不同用途,使用来自用作插入数据源的表的OUTPUT子句返回值。换句话说,如果我从[tableA]插入[tableB],那么我可能需要事后的[tableA]中的一些值,特别是如果[tableB]有一个标识。观察我的第一次尝试使用直接插入,我试图从@source。[id]获取一个未在插入中使用的字段: