Estoy tratando de crear una tabla de asignación para asociar los ID de las filas nuevas en una tabla con aquellas de las que se copiaron. La cláusula OUTPUT INTO parece perfecta para eso, pero no parece comportarse de acuerdo con la documentación.¿Qué columnas se pueden usar en la cláusula OUTPUT INTO?
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'.
(línea 34 siendo el uno con el OUTPUT INTO)
experimentación sugiere que sólo las filas que son en realidad presente en el objetivo de INSERT se puede seleccionar en OUTPUT INTO. Pero esto contradice los documentos en los libros en línea. El artículo sobre la cláusulasalida tiene ejemplo E, que describe un uso similar:
el resultado en rendimientos cláusula values de la tabla que se actualiza (WorkOrder) y también de la tabla Producto . La tabla Producto se usa en la cláusula FROM para especificar las filas a la actualización .
¿Alguien ha trabajado con esta función?
(Mientras tanto, me he reescrito el código para hacer el trabajo usando un bucle de cursor, pero eso es feo y todavía estoy curioso)
Y proporciona la clave para la solución. ¡Fusiona la declaración! Entonces @Simon logró proporcionar sintaxis. ¡Bonito! – lambacck