親子テーブルにデータを挿入します
この例の目的は、受信 UDT (@tEmployeeData) から複数のテーブルにデータを挿入し、親レコードと子レコード間の正しいマッピングを確保することです。
マッピングの問題の解決
必要なマッピングを確立するには、一時的なemployeeId列をUDTに追加し、連続値を入力します。さらに、テーブル変数 (@EmployeeidMap) を作成して、UDT 内の一時的な従業員 ID をターゲット テーブルで生成された実際の従業員 ID にマップします。
メインテーブルにデータを入力します
MERGE を利用して、挿入されたデータとソース データからの値を @MainEmployee テーブルに設定します。これにより、生成された EmployeeID 値を取得し、同時にマッピング テーブルにデータを取り込むことができます。
<code class="language-sql">MERGE INTO @MainEmployee USING @tEmployeeData AS sourceData ON 1 = 0 WHEN NOT MATCHED THEN INSERT (FirstName, LastName) VALUES (sourceData.FirstName, sourceData.LastName) OUTPUT sourceData.EmployeeId, inserted.EmployeeID INTO @EmployeeidMap (temp_id, id);</code>
親子テーブルへのマッピングと挿入
次に、@tEmployeeData と @EmployeeidMap を結合して実際の従業員 ID を取得し、これを @ParentEmployeeDepartment テーブルに設定するために使用します。同様に、@ParentEmployeeDepartment を @tEmployeeData に接続して親 ID を子データにマップし、そのデータを @ChildEmployeeDepartmentTypeA と @ChildEmployeeDepartmentTypeB に挿入します。
テストインサート
マッピングが成功したことを確認するために、UDT データをマッピングテーブルおよびターゲットテーブルと結合するクエリを実行します。
<code class="language-sql">SELECT FirstName, LastName, SentData.DepartmentType As [部门类型], DepartmentBuilding As 建筑物, DepartmentEmployeeLevel As [员工级别], DepartmentTypeAMetadata As [A 元数据], DepartmentTypeBMetadata As [B 元数据], SentData.EmployeeId As 临时ID, EmpMap.id As [员工ID], DeptMap.ParentEmployeeDepartmentID As [部门ID] FROM @tEmployeeData SentData INNER JOIN @EmployeeidMap EmpMap ON SentData.EmployeeId = temp_id INNER JOIN @ParentEmployeeDepartment DeptMap ON EmpMap.id = DeptMap.EmployeeID</code>
このアプローチでは、不必要な行ごとの操作を回避してパフォーマンスを最適化しながら、子データがそれぞれの親レコードに正しくマッピングされるようにします。
以上が正しいマッピングを使用して親テーブルと子テーブルにデータを効率的に挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。