¿Qué columnas se pueden utilizar en la cláusula OUTPUT INTO?
Estoy tratando de construir una tabla de asignación para asociar los ID de las nuevas filas en una tabla con los que se copian. La cláusula OUTPUT INTO parece perfecta para eso, pero no parece comportarse de acuerdo con la documentación.
Mi código:
DECLARE @Missing TABLE (SrcContentID INT PRIMARY KEY )
INSERT INTO @Missing
( SrcContentID )
SELECT cshadow.ContentID
FROM Private.Content AS cshadow
LEFT JOIN Private.Content AS cglobal ON cshadow.Tag = cglobal.Tag
WHERE cglobal.ContentID IS NULL
PRINT 'Adding new content headers'
DECLARE @Inserted TABLE (SrcContentID INT PRIMARY KEY, TgtContentID INT )
INSERT INTO Private.Content
( Tag, Description, ContentDate, DateActivate, DateDeactivate, SortOrder, CreatedOn, IsDeleted, ContentClassCode, ContentGroupID, OrgUnitID )
OUTPUT cglobal.ContentID, INSERTED.ContentID INTO @Inserted (SrcContentID, TgtContentID)
SELECT Tag, Description, ContentDate, DateActivate, DateDeactivate, SortOrder, CreatedOn, IsDeleted, ContentClassCode, ContentGroupID, NULL
FROM Private.Content AS cglobal
INNER JOIN @Missing AS m ON cglobal.ContentID = m.SrcContentID
Resultados en el mensaje de error:
Msg 207, Level 16, State 1, Line 34
Invalid column name 'SrcContentID'.
(la línea 34 es la que tiene la SALIDA EN)
La experimentación sugiere que solo las filas que están realmente presentes en el objetivo del INSERT se pueden seleccionar en el OUTPUT INTO. Pero esto contradice los documentos en los libros en línea. El articulo sobreCláusula de SALIDA tiene el ejemplo E que describe un uso similar:
La cláusula OUTPUT INTO devuelve valores de la tabla que se está actualizando (WorkOrder) y también de la tabla Producto. La tabla de productos se utiliza en la cláusula FROM para especificar las filas a actualizar.
¿Alguien ha trabajado con esta característica?
(Mientras tanto, he reescrito mi código para hacer el trabajo utilizando un bucle de cursor, pero eso es feo y sigo sintiendo curiosidad)