Ho apportato alcune modifiche al mio database e ho bisogno di migrare i vecchi dati nelle nuove tabelle. Per questo, ho bisogno di compilare una tabella (ReportOptions) prendendo i dati dalla tabella originale (Practice) e riempire una seconda tabella 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...)
Ho effettuato una query per ottenere tutti i dati di cui ho bisogno per passare da Practice a ReportOptions, ma ho problemi a riempire la tabella 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
Se potessi fare riferimento a un campo che non si trova nella tabella di destinazione nella clausola OUTPUT, sarebbe fantastico (penso di non poterlo fare, ma non lo so per certo). Delle idee su come realizzare il mio bisogno?
OUTPUT
clausola. Quindi, anche se non fornisci un valore per una determinata colonna nella tuaINSERT
dichiarazione, puoi comunque specificare quella colonna nellaOUTPUT
clausola. Tuttavia, non è possibile restituire variabili SQL o colonne da altre tabelle.