高效插入SQL父子表数据
本文介绍一种高效插入SQL父子表数据的方法,步骤如下:
1. 为UDT添加EmployeeId列
<code class="language-sql">CREATE TYPE dbo.tEmployeeData AS TABLE ( FirstName NVARCHAR(50), LastName NVARCHAR(50), DepartmentType NVARCHAR(10), DepartmentBuilding NVARCHAR(50), DepartmentEmployeeLevel NVARCHAR(10), DepartmentTypeAMetadata NVARCHAR(100), DepartmentTypeBMetadata NVARCHAR(100), EmployeeId INT ); GO</code>
2. 填充EmployeeId列
<code class="language-sql">DECLARE @tEmployeeData dbo.tEmployeeData; INSERT INTO @tEmployeeData (FirstName, LastName, DepartmentType, DepartmentBuilding, DepartmentEmployeeLevel, DepartmentTypeAMetadata, DepartmentTypeBMetadata, EmployeeId) SELECT N'Tom_FN', N'Tom_LN', N'A', N'101', N'IV', N'Tech/IT', NULL, 5 UNION SELECT N'Mike_FN', N'Mike_LN', N'B', N'OpenH', N'XII', NULL, N'Med', 6 UNION SELECT N'Joe_FN', N'Joe_LN', N'A', N'101', N'IV', N'Tech/IT', NULL, 7 UNION SELECT N'Dave_FN', N'Dave_LN', N'B', N'OpenC', N'XII', NULL, N'Lab', 8;</code>
3. 使用MERGE语句填充Employee表
<code class="language-sql">DECLARE @EmployeeidMap TABLE (temp_id INT, id INT); MERGE INTO @MainEmployee AS target 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>
4. 填充ParentEmployeeDepartment表
<code class="language-sql">INSERT INTO @ParentEmployeeDepartment (EmployeeID, DepartmentType) SELECT Id, DepartmentType FROM @tEmployeeData INNER JOIN @EmployeeidMap ON EmployeeID = temp_id;</code>
5. 填充ChildEmployeeDepartmentTypeA和ChildEmployeeDepartmentTypeB表
<code class="language-sql">INSERT INTO @ChildEmployeeDepartmentTypeA (ParentEmployeeDepartmentID, DepartmentBuilding, DepartmentEmployeeLevel, DepartmentTypeAMetadata) SELECT ParentEmployeeDepartmentID, DepartmentBuilding, DepartmentEmployeeLevel, DepartmentTypeAMetadata FROM @tEmployeeData INNER JOIN @EmployeeidMap ON EmployeeID = temp_id WHERE DepartmentType = 'A'; INSERT INTO @ChildEmployeeDepartmentTypeB (ParentEmployeeDepartmentID, DepartmentBuilding, DepartmentEmployeeLevel, DepartmentTypeBMetadata) SELECT ParentEmployeeDepartmentID, DepartmentBuilding, DepartmentEmployeeLevel, DepartmentTypeBMetadata FROM @tEmployeeData INNER JOIN @EmployeeidMap ON EmployeeID = temp_id WHERE DepartmentType = 'B';</code>
6. 输出结果
<code class="language-sql">SELECT * FROM @MainEmployee; SELECT * FROM @ParentEmployeeDepartment; SELECT * FROM @ChildEmployeeDepartmentTypeA; SELECT * FROM @ChildEmployeeDepartmentTypeB;</code>
以上是如何在SQL中高效地向父子表插入数据?的详细内容。更多信息请关注PHP中文网其他相关文章!