我如何更新标题表状态为封闭与SQL中的详细表状态比较
本文关键字:状态 SQL 比较 更新 标题 何更新 | 更新日期: 2023-09-27 18:02:30
Header
表:
HeadeID Status
----------------
1 Open
Detail
表:
DetailID HeaderID Status
-------------------------
1 1 Close
2 1 Close
SQL Server允许使用触发器。简单来说,触发器是在更新表时执行的存储过程。您通常使用触发器来执行业务规则/逻辑。
因此,要应用于您的情况,请在Details表上放置一个Trigger,它将检查当前HeaderID的所有行是否已设置为Closed,然后更新Header表。
CREATE TRIGGER Detail_Update_Header
ON Detail
AFTER Insert, Update
AS
BEGIN
SET NOCOUNT ON;
declare @currentHeaderID int;
SELECT @currentHeaderID = i.HeadeID from inserted i;
IF((SELECT COUNT(*) FROM Detail WHERE HeaderID = @currentHeaderID) > (SELECT COUNT(*) FROM Detail WHERE HeaderID = @currentHeaderID AND Status = 'Closed'))
BEGIN
UPDATE Header
SET Status = 'closed';
END
END
GO
如果我理解正确的话,你需要这样的东西:
UPDATE dbo.Header
set Status = b.Status
from dbo.Header H
inner join dbo.Detail b ON
b.HeaderID = H.HeaderID