如何使用 Sql Server 2008 获取用于插入到 select 中的 scope_identity 列表?

Posted

技术标签:

【中文标题】如何使用 Sql Server 2008 获取用于插入到 select 中的 scope_identity 列表?【英文标题】:How do I get the list of scope_identities for a inset into select using Sql Server 2008? 【发布时间】:2013-05-07 13:46:56 【问题描述】:

我正在尝试从临时表中插入到 select 中。我的问题是我需要插入项目并在插入语句中检索插入项目的 ID。

如何获取插入的标识值列表?

代码如下:

                 SELECT  O.OrderID,
                  O.SingleAgreementID ,
                  O.OrderTypeID ,
                  O.OrderStatusID ,
                  O.Reference ,
                  O.CreateDate ,
                  O.ValidityDate ,
                  O.DeliveredDate ,
                  O.PathologyID ,
                  O.DiscountTypeID ,
                  O.DiscountAmount ,
                  O.ValidityDays ,
                  O.DeductibleTypeID ,
                  O.DeductibleAmount ,
                  O.LimitOrder ,
                  O.Comments ,
                  O.CreatedUserID ,
                  O.StartPeriodDate ,
                  O.EndPeriodDate ,
                  O.GenerationDay ,
                  O.ParentOrderID ,
                  O.CanceledDate ,
                  O.CanceledUserID INTO #TEMPORDERS
                FROM    dbo.[Order] O
                WHERE   O.GenerationDay = DAY(GETDATE() -1)
                        AND  O.OrderTypeID = 2 
                        AND @Yesterday BETWEEN CONVERT(VARCHAR(10),O.StartPeriodDate,111) AND CONVERT(VARCHAR(10),O.EndPeriodDate,111)



                INSERT INTO dbo.[Order]
                        ( SingleAgreementID ,
                          OrderTypeID ,
                          OrderStatusID ,
                          Reference ,
                          CreateDate ,
                          ValidityDate ,
                          DeliveredDate ,
                          PathologyID ,
                          DiscountTypeID ,
                          DiscountAmount ,
                          ValidityDays ,
                          DeductibleTypeID ,
                          DeductibleAmount ,
                          LimitOrder ,
                          Comments ,
                          CreatedUserID ,
                          StartPeriodDate ,
                          EndPeriodDate ,
                          GenerationDay ,
                          ParentOrderID ,
                          CanceledDate ,
                          CanceledUserID
                        )
                SELECT  TEMP.SingleAgreementID ,
                        TEMP.OrderTypeID ,
                        1 ,
                        TEMP.Reference ,
                        TEMP.CreateDate ,
                        GETDATE() + TEMP.ValidityDays,
                        NULL ,
                        TEMP.PathologyID ,
                        TEMP.DiscountTypeID ,
                        TEMP.DiscountAmount ,
                        TEMP.ValidityDays ,
                        TEMP.DeductibleTypeID ,
                        TEMP.DeductibleAmount ,
                        TEMP.LimitOrder ,
                        TEMP.Comments ,
                        'Orden Generada de manera automatica' ,
                        TEMP.StartPeriodDate ,
                        TEMP.EndPeriodDate ,
                        TEMP.GenerationDay ,
                        TEMP.OrderID ,
                        NULL ,
                        NULL 
                FROM #TEMPORDERS TEMP

--Get all Ids inserted HERE
    SELECT SCOPE_IDENTITY();
--Get the IDs saved and insert the detail.

我不知道这是否可能?对此有何想法?

谢谢。

【问题讨论】:

【参考方案1】:

您可以使用Output 用新 ID 填充表格

Declare @OutputTable table(aNewid int)

Insert into Table
........
Output inserted.ID

Select ....
from InputTable

【讨论】:

非常感谢您的帮助。【参考方案2】:

试试这个 -

INSERT INTO dbo.[Order] (
        SingleAgreementID
    ,   OrderTypeID
    ,   OrderStatusID
...
    )
OUTPUT INSERTED.[IdentityColumn] INTO #temp1
SELECT  t.SingleAgreementID
    ,   t.OrderTypeID
    ,   1
...
FROM #TEMPORDERS t

SELECT * FROM #temp1

【讨论】:

以上是关于如何使用 Sql Server 2008 获取用于插入到 select 中的 scope_identity 列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中使用表值参数访问 SQL Server 2008 存储过程

如何在 sql server 2008 中将日期与 GETDATE() 进行比较

ORM - 特定于用于 .NET 的 SQL Server 2008+

无法通过 T4 模板访问我的 SQL Server 2008 错误返回给我如何获取表?

获取 MS SQL Server 2008 的连接字符串

如何在 sql server 2008 中获取没有约束的表列?