【问题标题】:How to update 2nd table with identity value of inserted rows into 1st table如何使用插入行的标识值将第二个表更新到第一个表中
【发布时间】:2011-05-22 02:13:15
【问题描述】:

我有以下表结构

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 个外部参照表。还是在WorkItem 表中放置RequirementIdNoticeIdEventId 会更好,其中1 列将有一个值,而其他2 列将为空?希望这一切都有意义。谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 这很甜蜜。我查看了分别使用 OUTPUT 和 MERGE 来做我需要做的事情的例子,但从来没有像那样一起使用。奇迹般有效。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多