我执行步骤:
[_oid]
[_oid]
之外的所有内容,输出生成的[id]
[id]
和相应的[_oid]
SQL:
CREATE TABLE #temp
(
[Hash] INT NOT NULL,
[Size] INT NOT NULL,
[Data] NVARCHAR(MAX),
[_oid] INT NOT NULL
)
--here insert data into #temp--
INSERT [dbo].[TestObjects]
OUTPUT INSERTED.[Id]
SELECT [Hash], [Size], [Data]
FROM #temp
DROP TABLE #temp
如何返回([Id], [_oid])
行? ....或者至少返回[Id]
排序的[_oid]
吗?
我知道insert不会在其输出中保留插入项目的顺序,但仍然...
答案 0 :(得分:1)
我认为您需要的是INSERT INTO,就像这样:
INSERT INTO [dbo].[TestObjects]
SELECT Hash, Size, Data FROM #temp
ORDER BY _oid
但是正如您所说,不能保证从TestObjects中进行选择时的顺序,因此,如果重要的话,您是否可以在TestObjects中没有字段,可以在从中进行选择时进行ORDER BY?
答案 1 :(得分:1)
如果您插入#temp的o_id和(hash,size,data)对于每一行(即键)都是唯一的,则可以从#temp中检索插入的o_id:
select t.[_oid],to.[Id]
from #temp t
inner join [dbo].[TestObjects] to
on t.Hash=to.Hash and t.Size=to.Size and t.data=to.data
答案 2 :(得分:1)
正如George Menoutis所说,我确实合并了:
MERGE [dbo].[TestObjects] AS T_Base
USING #temp AS T_Source
ON (0<>0)
WHEN NOT MATCHED THEN INSERT ([Hash],[Size],[Data]) VALUES (T_Source.[Hash],T_Source.[Size],T_Source.[Data])
OUTPUT INSERTED.[Id], T_Source.[_oid];
如果有人有更好的方法,请随时为这个答案做贡献。