簡體   English   中英

使用SQL OUTPUT將INSERT插入具有Identity(或默認值)的表中

[英]Using SQL OUTPUT for INSERT into a table with Identity (or default values)

我將記錄插入到需要序列號的表(付款)中。 我使用帶有OUTPUT子句的UPDATE語句從另一個表(SequenceNumbers)中獲取並遞增該序列號。

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

我希望能夠將UPDATE語句與Payments INSERT語句結合使用OUTPUT INTO,如下所示

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

但是經過測試后,您必須提供目標表中的所有字段。 我想做的是將Payments表中Id字段的自動Identity值與所有缺失字段的默認值一起使用。

然后,我需要將Payments表中的Id(身份)值返回給調用方。

我想知道這是否可能,或者是否還有其他選擇?

我在下面放置了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)
)

您只需要指定要插入“ 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM