使用SQL OUTPUT INSERT到具有Identity(或默认值)的表中

时间:2014-10-17 07:44:45

标签: sql sql-server

我将记录插入需要序列号的表(付款)中。我使用带有OUTPUT子句的UPDATE语句从另一个表(SequenceNumbers)获取并递增此序列号。

UPDATE [SequenceNumbers] SET SequenceNo = SequenceNo + 1 
    OUTPUT INSERTED.SequenceNo 
    WHERE EstateId = @EstateId

我希望能够使用OUTPUT INTO将上述UPDATE语句与Payments INSERT语句结合使用,如下所示

UPDATE [SequenceNumbers] SET Sequence = Sequence + 1 
    OUTPUT @EstateId AS EstateId, 
       INSERTED.SequenceNo AS SequenceNo
    INTO Payments
    WHERE EstateId = @EstateId

但是在测试时,您必须提供目标表中的所有字段。我想要做的是使用Payments表中Id字段的自动Identity值以及任何缺少字段的默认值。

然后我需要将Payments表中的Id(Identity)值返回给调用者。

我想知道这是否可行或是否有另一种选择?

我在下面列出了Payments和SequenceNumbers表的简化示例供参考。

CREATE TABLE [Payments](
    [EstateId]   INT NOT NULL,
    [Id]         INT NOT NULL IDENTITY , 
    [SequenceNo] INT NOT NULL DEFAULT 0,
    .... other fields 
    PRIMARY KEY ([EstateId], [Id])
)

CREATE TABLE [SequenceNumbers] (
    [EstateId]   INT NOT NULL,
    [SequenceNo] INT DEFAULT ((0)) NOT NULL,
    PRIMARY KEY CLUSTERED ([EstateId] ASC)
)

1 个答案:

答案 0 :(得分:2)

您只需指定 Payments中的哪些列即可插入:

UPDATE [SequenceNumbers] 
SET Sequence = Sequence + 1 
  OUTPUT Inserted.EstateId, Inserted.SequenceNo
  INTO Payments(EstateId, SequenceNo)     -- define what columns to insert into!
WHERE EstateId = @EstateId