我需要一些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)
我不知道存储过程应该是什么样的,以达到我需要的结果。谢谢你的帮助。
答案 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
)