如何使用来自两个单独表的行对一个表执行批量SQL插入

时间:2013-10-17 21:48:49

标签: sql tsql

我需要一些T-SQL帮助。我们有一个应用程序跟踪分配给每个员工的培训要求(如CPR,急救等)。必须指定所有员工的最低培训要求,我的人力资源部门希望我能够通过单击按钮为所有员工分配最低培训要求。因此,我创建了一个名为TrainingRequirementsForAllEmployees的表,其中包含已确定的最低TrainingRequirements的TrainingRequirementID。

我想在Employees表中的每个员工的表Employee_X_TrainingRequirements中插入行,以及TrainingRequirementsForAllEmployees中的每一行。 为清晰起见,我将添加缩写表模式。

第一个表是员工

EmployeeNumber  PK  char(6)
EmployeeName        varchar(50)

第二个表是 TrainingRequirementsForAllEmployees

TrainingRequirementID     PK  int

第三个表(我需要插入的表)是 Employee_X_TrainingRequirements

TrainingRequirementID  PK  int
EmployeeNumber         PK  char(6)

我不知道存储过程应该是什么样的,以达到我需要的结果。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

当需要两组数据的笛卡尔积时,

cross join运算符是合适的。因此,在存储过程的主体中,您应该具有以下内容:

insert into Employee_X_TrainingRequirements (TrainingRequirementID, EmployeeNumber)
select r.TrainingRequirementID, e.EmployeeNumber
from Employees e
    cross join TrainingRequirementsForAllEmployees r
where not exists (
    select 1 from Employee_X_TrainingRequirements
    where TrainingRequirementID = r.TrainingRequirementID
        and EmployeeNumber = e.EmployeeNumber
    )