2

我正在尝试从临时表中插入选择。我的问题是我需要插入项目并在插入语句中检索插入项目的 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.

我不知道这是否可能?对此有什么想法吗?

谢谢。

4

2 回答 2

3

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

Declare @OutputTable table(aNewid int)

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

Select ....
from InputTable
于 2013-05-07T13:56:13.020 回答
3

试试这个——

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

SELECT * FROM #temp1
于 2013-05-07T14:01:40.830 回答