如何使用 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+