データベースに変更を加えたため、古いデータを新しいテーブルに移行する必要があります。そのために、元のテーブル(Practice)からデータを取得してテーブル(ReportOptions)に入力し、2番目の中間テーブル(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...)
練習からReportOptionsに移動する必要があるすべてのデータを取得するクエリを作成しましたが、中間テーブルに入力するのに問題があります
--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
宛先句にないフィールドをOUTPUT句で参照できれば、すばらしいでしょう(私はできないと思いますが、確かではありません)。私のニーズを達成する方法についてのアイデアはありますか?
@marc_s返信ありがとうございます。宛先テーブルに必要なフィールドがありません(ReportOptionにないPracticeIdが必要です)
—
AlejandroB。12年
OUTPUT句では、行を挿入したテーブルの任意の列を返すことができます。したがって、INSERTステートメントの特定の列に値を指定しない場合でも、OUTPUT句でその列を指定できます。ただし、他のテーブルからSQL変数または列を返すことはできません。