SQLServer触发器
请帮助我编写一个触发器,将新行添加到表中 我的数据库中有3个表:SQLServer触发器,sql,sql-server,triggers,Sql,Sql Server,Triggers,请帮助我编写一个触发器,将新行添加到表中 我的数据库中有3个表: 地区(id、名称);id-主要 (身份证、姓名);id-主要 可用性(id、地区、技术、计数);id-主要,region-Regions.id上的外部,Technik-technics.id上的外部 我想在区域中添加行时为每一行添加可用性中的新行 有些人认为: procedure void OnAddNewRegion(int region) { foreach (Row r in Technic) {
procedure void OnAddNewRegion(int region)
{
foreach (Row r in Technic)
{
Availability.Rows.Add(new Row(id, region, r.Id, 0));
}
}
但是在SQL触发器中。
我想在添加新行时也这样做。尝试类似的操作(假设Availability.id是一个标识),它还将同时处理插入的多行:
CREATE TRIGGER TR_Regions ON Regions
FOR INSERT
AS
INSERT INTO Availability
(region, technic, count)
SELECT
i.id, t.id, 0
FROM INSERTED i
CROSS JOIN Technics t
GO
您没有说明区域如何与工艺连接,所以我交叉连接了它们(每个插入的区域,每个工艺都有一行)。在我看来,实现此特定业务/插入逻辑的更干净的解决方案是使用存储过程
只需创建一个存储过程来处理将记录插入区域表的逻辑 我猜连接是通过可用性表进行的,所以交叉连接似乎是正确的,为什么您会这样认为?触发器实际上只不过是在特定条件下自动运行的存储过程。使用触发器可以防止某人忘记/未能运行存储过程,从而强制执行该过程要处理的业务规则。另一方面,触发器充当意外存储过程。当您调用存储过程时,您知道它可能正在插入附件行;简单的insert语句就不那么清楚了。当然,如果使用存储过程,则必须取消对该表的insert权限。