Hice algunas modificaciones en mi base de datos y necesito migrar los datos antiguos a las nuevas tablas. Para eso, necesito llenar una tabla (ReportOptions) tomando los datos de la tabla original (Practice) y llenar una segunda tabla intermedia (PracticeReportOption).
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 Practice a ReportOptions, pero tengo 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 lograr mi necesidad?
OUTPUT
cláusula. Entonces, incluso si no proporciona un valor para una columna determinada en suINSERT
declaración, aún puede especificar esa columna en laOUTPUT
cláusula. Sin embargo, no puede devolver columnas o variables SQL de otras tablas.