我有以下表结构
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个外部参照表。或者将WorkItems
,RequirementId
和NoticeId
放在EventId
表中会更好,其中1列会有值而其他2会为空?希望这一切都有意义。感谢。
答案 0 :(得分:3)
您应该阅读MERGE and OUTPUT – the swiss army knife of T-SQL了解更多相关信息。
今天我偶然发现了它的不同用途,使用来自用作插入数据源的表的OUTPUT子句返回值。换句话说,如果我从[tableA]插入[tableB],那么我可能需要事后的[tableA]中的一些值,特别是如果[tableB]有一个标识。观察我的第一次尝试使用直接插入,我试图从@source。[id]获取一个未在插入中使用的字段: