gpt4 book ai didi

sql - 触发 2 个表

转载 作者:行者123 更新时间:2023-12-02 03:52:57 24 4
gpt4 key购买 nike

这是一道作业题,只是为了说清楚。

这是关系模式:

  • PaperInvolvement (paperNr, academicId, paperRole)
  • Academic (academicId, acadName, employer)

所以 (academicID)Academic 的主键,(paperNr, academicId)PaperInvolvement< 的主键 表。

这是我被要求执行的触发器:

  • PaperInvolvement 插入后更新
  • 更新后在 Academic
  • 防止为同一家公司工作的任何 2 位学者以相反的角色参与同一篇论文。
  • 使用存储过程或将其完全覆盖在触发器中

此表中只有 2 个角色可用,分别是 ReviewerAuthor

这是我到目前为止所做的:

CREATE TRIGGER TR_PaperInvolvement_1
ON PaperInvolvement
AFTER INSERT, UPDATE
AS
IF EXISTS
(
SELECT a.academicId, paperRole, paperNr
FROM
(SELECT academicId
FROM Academic
GROUP BY employer, academicId) AS a
JOIN
(SELECT academicId, paperRole, paperNr
FROM PaperInvolvement

GROUP BY paperNr, academicId, paperRole) AS p_inv
ON a.academicId = p_inv.academicId
WHERE paperRole = 'Author' AND paperRole = 'Reviewer'

)
BEGIN
RAISERROR('Cannot have 2 Academics from the same company to work on
different roles for this paper.',16,1)
ROLLBACK TRANSACTION
END
GO

我的问题是,根据要求(我在项目符号列表中列出的内容),这是回答问题的正确方法吗?

最佳答案

试试这个

CREATE TRIGGER TR_PaperInvolvement_Modify
ON PaperInvolvement
AFTER INSERT, UPDATE
AS
begin
if exists
(
select P.paperNr, A.employer
from PaperInvolvement as P
inner join Academic as A on A.academicID = P.academicID
where P.paperNr in (select i.paperNr from inserted as i)
group by P.paperNr, A.employer
having
count(case when P.paperRole = 'Author' then 1 end) > 0 and
count(case when P.paperRole = 'Reviewer' then 1 end) > 0
)
begin
raiserror('Cannot have 2 Academics from the same company to work on different roles for this paper.', 16, 1)
rollback transaction
end
end

关于sql - 触发 2 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13718328/

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