gpt4 book ai didi

SQL Server - BEFORE INSERT 触发器

转载 作者:行者123 更新时间:2023-12-04 23:44:26 24 4
gpt4 key购买 nike

我有两个表如下:

表 1 'MySkills' [主键 (EmpId, SkillId)]

+----------+------------+---------+----------+-----------+------------+-----------------+----------------+
| EmpId | CategoryId | SkillId | ExpYears | ExpMonths | Experience | RatingSubmitted | RatingApproved |
+----------+------------+---------+----------+-----------+------------+-----------------+----------------+
| CSSL9610 | arcgis | arcgis1 | 0.00 | 0.00 | 0.00 | 1.00 | NULL |
| CSSL9610 | arcgis | arcgis2 | 0.00 | 0.00 | 0.00 | 0.00 | NULL |
| CSSL9610 | arcgis | arcgis3 | 0.00 | 0.00 | 0.00 | 0.00 | NULL |
| CSSL9610 | arcgis | arcgis4 | 0.00 | 0.00 | 0.00 | 0.00 | NULL |
| CSSL9610 | arcgis | arcgis5 | 0.00 | 0.00 | 0.00 | 0.00 | NULL |
| CSSL9610 | arcgis | arcgis6 | 0.00 | 0.00 | 0.00 | 0.00 | NULL |
| CSSL9610 | arcgis | arcgis7 | 0.00 | 0.00 | 0.00 | 0.00 | NULL |
+----------+------------+---------+----------+-----------+------------+-----------------+----------------+

和表 1 'MySkills_details' [主键 (EmpId)]
+-------+------------------+---------------+----------------+--------+---------------+---------+------------+
| EmpId | Experience_Prior | Qualification | Specialization | Status | LastSubmitted | NextDue | ApprovedOn |
+-------+------------------+---------------+----------------+--------+---------------+---------+------------+

目前,MySkills_details 中没有数据。
我必须在 MySkills_details 中的 EmpId 上创建一个外键,引用 MySkills 中的 EmpId,由于 MySkills 中的复合主键,这是不可能的。
所以我决定反其道而行之。除了插入首先发生在 MySkills 中,据我所知,SQL Server 中没有 BEFORE INSERT 触发器。
那么,如何编写像 BEFORE INSERT 这样的触发器,它先在 MySkill_details 中插入数据,然后再插入 MySkills。

最佳答案

请按照检查第一个详细信息表的 SQL Server 而不是触发器进行测试。
如果详细信息中缺少数据,它会插入该表
第二步,继续插入技能表

CREATE Trigger MySkillsInsteadOfInsert on dbo.MySkills Instead Of Insert
AS
Begin

insert into MySkills_details (
EmpId -- and other relevant columns
)
select i.EmpId -- and other relevant columns
from inserted i
left join MySkills_details d on i.EmpId = d.EmpId
where d.EmpId is null

Insert Into MySkills(EmpId) -- and other relevant columns
Select EmpId -- and other relevant columns
From inserted i;

End

更多 sample 请访问 SQL Server instead Of trigger请引用给定的例子。

但是请注意我的话,我认为将技能保留在不同的主表中将是另一种设计。
在插入细节之前,通常我们会检查 master 是否存在。
因此,您的控制通常可能以相反的方式运行。
用户一般先插入主数据。在本例中为技能表数据。
然后填充详细信息。

关于SQL Server - BEFORE INSERT 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40014056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com