Saya telah membuat beberapa modifikasi pada database saya dan saya perlu memigrasi data lama ke tabel baru. Untuk itu, saya perlu mengisi tabel (ReportOptions) yang mengambil data dari tabel asli (Practice), dan mengisi tabel perantara kedua (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...)
Saya membuat kueri untuk mendapatkan semua data yang saya butuhkan untuk berpindah dari Praktik ke ReportOptions, tetapi saya mengalami masalah untuk mengisi tabel perantara
--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
Jika saya bisa mereferensikan bidang yang tidak ada di tabel tujuan pada klausa OUTPUT, itu akan bagus (saya pikir saya tidak bisa, tapi saya tidak tahu pasti). Ada gagasan tentang bagaimana memenuhi kebutuhan saya?
OUTPUTklausa Anda . Jadi, meskipun Anda tidak memberikan nilai untuk kolom tertentu dalamINSERTpernyataan Anda, Anda masih dapat menentukan kolom tersebut dalamOUTPUTklausa. Namun Anda tidak dapat mengembalikan variabel atau kolom SQL dari tabel lain.