Me gustaría INSERT
filas multiples (usando INSERT SELECT
) y OUTPUT
todos los ID nuevos y viejos en una tabla de "mapeo".INSERTAR filas múltiples y valores originales de salida (fuente)
¿Cómo puedo obtener el original ID (o cualquier valor de origen) en la cláusula OUTPUT
? No veo una forma de obtener ningún valor fuente allí.
Aquí es un ejemplo de código mínima:
-- create some test data
declare @t table (id int identity, name nvarchar(max))
insert @t ([name]) values ('item 1')
insert @t ([name]) values ('another item')
-- duplicate items, storing a mapping from src ID => dest ID
declare @mapping table (srcid int, [newid] int)
insert @t ([name])
output ?????, inserted.id into @mapping-- I want to use source.ID but it's unavailable here.
select [name] from @t as source
-- show results
select * from @t
select * from @mapping
Mi escenario real es más complejo, así que por ejemplo no puedo crear una columna temp en la tabla de datos con el fin de almacenar un "ID originales" temporalmente, y No puedo identificar elementos de manera única por otra cosa que no sea la columna 'ID'.
[pena que no está en 2008] (http://stackoverflow.com/questions/5365629/using-merge-output-to -get-mapping-between-source-id-and-target-id) –