Wprowadziłem pewne modyfikacje do mojej bazy danych i muszę przeprowadzić migrację starych danych do nowych tabel. W tym celu muszę wypełnić tabelę (ReportOptions) pobierając dane z oryginalnej tabeli (Practice) i wypełnić drugą tabelę pośrednią (PracticeReportOption).Czy dla przykładu SQL Output można zwrócić kolumnę, która nie jest wstawiana?
ReportOption (ReportOptionId int PK, field1, field2...)
Practice (PracticeId int PK, field1, field2...)
PracticeReportOption (PracticeReportOptionId int PK, PracticeId int FK, ReportOptionId int FK, field1, field2...)
Zrobiłem kwerendę, aby uzyskać wszystkie dane muszę przejść od praktyki do ReportOptions, ale mam problemy, aby wypełnić tabelę pośredni
--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
Gdybym mógł odwoływać się do pola, które nie znajduje się w tabeli docelowej na klauzuli OUTPUT, byłoby świetnie (myślę, że nie mogę, ale nie wiem na pewno). Jakieś pomysły, jak zaspokoić moje potrzeby?
Z góry dziękuję.
Możesz zwrócić jedną z kolumn tabeli, do której wstawiłeś wiersz, do swojej klauzuli "WYJŚCIE". Więc nawet jeśli nie podasz wartości dla danej kolumny w instrukcji 'INSERT', nadal możesz określić tę kolumnę w klauzuli' OUTPUT'. Nie można jednak zwrócić zmiennych SQL lub kolumn z innych tabel. –
@marc_s dzięki za odpowiedź, ale nie mam pola, którego potrzebuję w tabeli docelowej (potrzebuję PracticeId, które nie jest w ReportOption) –