当另一个表中的字段发生更改时,我需要更新零件表中的多个行,并且我想使用触发器。触发的原因是许多现有的应用程序正在使用和修改数据,而我没有访问所有这些数据的权限。我知道一些数据库支持触发器语句中的For Each Row,但我不认为Microsoft支持。
具体地说,我有两个表,Part和Categories。
Parts有Part#,Category_ID,Part_Name,Original和许多其他的东西
类别有Category_ID和Category_name。
原始是由':‘分隔的Category_Name和Part_Name的串联
例如手环:BB129090
如果有人更改了Category_Name (例如,从手环更改为手环),则必须在Parts表的每一行中更新原始字段。虽然这是一个不常见的事件,但它的发生足以造成麻烦。
任何Web和桌面应用程序都不使用原始版本
所有会计应用程序仅使用原件
保持会计和其他应用程序同步是我的任务。
数据库不是我设计的,写会计程序的公司也不会改变它。
发布于 2009-08-12 04:49:04
或者另一种选择:为什么不在这两个表上为您的会计部门创建一个视图,其中包含以下连接的列:
CREATE VIEW dbo.AccountingView
AS
SELECT
p.PartNo, p.Part_Name, p.Category_ID,
c.Category_Name + ':' + p.PartName as 'Original'
FROM
Parts p
INNER JOIN
Category c ON p.Category_ID = c.Category_ID现在,您的会计人员可以使用此视图进行报告,它总是新鲜的,总是最新的,并且您不必担心更新和插入触发器以及所有那些棘手的事情……
Marc
发布于 2009-08-09 20:25:31
我猜在您的情况下,不需要行级触发器。
你可以这样做
IF UPDATE(Category_Name)
UPDATE Parts
SET Original = inserted.Category_Name + ':' + Part_Name
FROM Parts
INNER JOIN inserted ON Parts.Category_ID = inserted.Category_ID作为Category表上的更新触发器。
如果确实需要逐行处理(例如,存储过程),则需要在插入时使用游标或WHILE循环。
发布于 2009-08-09 21:51:52
原始专栏违反了1NF,这是一个非常糟糕的想法。您可以选择
https://stackoverflow.com/questions/1252145
复制相似问题