我有以下样本格式表结构:
CUSTOMER 表
CUSTID INT,//PRIMARY KEY
CUSTDATA VARCHAR
员工表
EMPID INT,//PRIMARY KEY
EMPDATA VARCHAR
ITEM 表
ITEMID INT,//PRIMARY KEY
CUSTID INT,//REFERENCE KEY
ITEMTYPE INT //1 FOR CUSTOMER AND 2 FOR EMPLOYEE
EMPID INT
MERGEDATA 表
MERGEID INT,
CUSTDATA VARCHAR,
EMPDATA VARCHAR
ACTION VARCHAR
上面我有四个表(CUSTOMER, EMPLOYEE, ITEM
和MERGEDATA
),现在我想在ITEM
表上为INSERT/UPDATE/DELETE
事件创建SQL Server触发器,所以每当有活动时在ITEM
表上完成,它使用MERGEDATA
表上的操作填充我的ITEM
表。
因此,如果任何新行被插入ITEM
表,则新条目将进入MERGEDATA
表,具体取决于CUSTOMER
或EMPLOYEE
条目,如果有来自客户的任何条目,它将在ITEM
表格和CUSTOMER
表格中添加一个条目,如下所示
CUSTOMER 表
123, TESTCUSTOMER
ITEM 表
1, 123, 1, 0
对于Employee表也是如此,但在ITEM
表行中将与1, 456, 0, 2
类似。
现在我想在Trigger中编写if条件,如果有来自CUSTOMER表的条目
IF (ITEMTYPE == 1)
//Entry in MERGEDATA will as below
MERGEDATA 表
1, 123, 0, ACTION (will depend on type of trigger event trigger if INSERT(ACTION = INS), for update (UPDATE = UPD) etc
所以简而言之,我正在寻找触发器中的东西:
请建议!!
由于
答案 0 :(得分:0)
我的建议是:
创建三个单独的触发器 - 每个操作一个。这样可以更轻松地确定Action
,还可以灵活地单独打开/关闭每个操作。此外,触发器代码将更小,更易于理解,更易于维护。
鉴于这种设计,你的触发器将很简单:
CREATE TRIGGER trg_Item_Insert
ON dbo.Item FOR INSERT
AS
-- first insert customer-related data - if any
INSERT INTO dbo.MergeTable(CUSTDATA, EMPDATA, ACTION)
SELECT CustData, EmptyData, 'INSERT'
FROM Inserted
WHERE ITEMTYPE = 1
-- then insert employee-related data - if any
INSERT INTO dbo.MergeTable(CUSTDATA, EMPDATA, ACTION)
SELECT CustData, EmptyData, 'INSERT'
FROM Inserted
WHERE ITEMTYPE = 2
当您创建三个单独的触发器时,只需将'INSERT'
的{{1}}值替换为其他触发器中的Action
和'Update'
。
我遇到的问题是:
'Delete'
中的哪些列存储到Item
?MergeData
或Item
列中的列 - INT
中的列MergeData
- 您希望在此处应用哪种“转换”?有关详细信息,请see the excellent SQL Server Books Online documentation (freely available!) on CREATE TRIGGER