He realizado algunas modificaciones en mi base de datos y debo migrar los datos anteriores a las nuevas tablas. Para eso, necesito completar una tabla (ReportOptions) tomando los datos de la tabla original (Practice), y completar una segunda tabla intermedia (PracticeReportOption).¿Es posible para la cláusula SQL Output devolver una columna que no se haya insertado?
ReportOption (ReportOptionId int PK, field1, field2...)
Practice (PracticeId int PK, field1, field2...)
PracticeReportOption (PracticeReportOptionId int PK, PracticeId int FK, ReportOptionId int FK, field1, field2...)
Hice una consulta para obtener todos los datos que necesito para pasar de la práctica a la ReportOptions, pero estoy teniendo problemas para llenar la tabla intermedia
--Auxiliary tables
DECLARE @ReportOption TABLE (PracticeId int /*This field is not on the actual ReportOption table*/, field1, field2...)
DECLARE @PracticeReportOption TABLE (PracticeId int, ReportOptionId int, field1, field2)
--First I get all the data I need to move
INSERT INTO @ReportOption
SELECT P.practiceId, field1, field2...
FROM Practice P
--I insert it into the new table, but somehow I need to have the repation PracticeId/ReportOptionId
INSERT INTO ReportOption (field1, field2...)
OUTPUT @ReportOption.PracticeId, --> this is the field I don't know how to get
inserted.ReportOptionId
INTO @PracticeReportOption (PracticeId, ReportOptionId)
SELECT field1, field2
FROM @ReportOption
--This would insert the relationship, If I knew how to get it!
INSERT INTO @PracticeReportOption (PracticeId, ReportOptionId)
SELECT PracticeId, ReportOptionId
FROM @ReportOption
Si pudiera hacer referencia a un campo que no está en la tabla de destino en la cláusula OUTPUT, sería genial (creo que no puedo, pero no estoy seguro). ¿Alguna idea sobre cómo compensar mi necesidad?
Gracias de antemano.
Puede devolver cualquiera de las columnas de la tabla en la que está insertada una fila, en su cláusula 'OUTPUT'. Entonces, incluso si no proporciona un valor para una columna dada en su instrucción 'INSERT', aún puede especificar esa columna en la cláusula' OUTPUT'. Sin embargo, no puede devolver variables SQL o columnas de otras tablas. –
@marc_s gracias por su respuesta, pero no tengo el campo que necesito en la tabla de destino (necesito PracticeId, que no está en ReportOption) –