2011-05-22 34 views
2

我有以下表结构如何更新与插入行的标识值第二表到1台

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表中,因为根据WorkItemTypeIdWorkItem可以链接到RequirementNoticeEvent

因此,WorkItems确实有3个xref表。或者,将RequirementId,NoticeIdEventId放在WorkItem表中,其中1列是否有值,其他2是否为空?希望这一切都有道理。谢谢。

回答

3

您应该阅读MERGE and OUTPUT – the swiss army knife of T-SQL以获取更多信息。

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

+0

这很漂亮。我查看了使用OUTPUT和MERGE分别做我需要做的事情的例子,但从来没有这样做过。奇迹般有效。非常感谢。 – brad 2011-05-22 03:22:25

相关问题