1

我有以下示例格式表结构:

客户

CUSTID INT,//PRIMARY KEY
CUSTDATA VARCHAR

员工

EMPID INT,//PRIMARY KEY
EMPDATA VARCHAR

项目

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, ITEMMERGEDATA),现在我想在ITEM表上为INSERT/UPDATE/DELETE事件创建 SQL Server 触发器,所以每当在表上完成活动时,它都会使用在表上完成的操作ITEM填充我的表。MERGEDATAITEM

因此,如果将任何新行插入到表中,则根据或条目ITEM进入表中的新条目,例如,如果有来自客户的任何条目,它将在表中以及在下表中添加一个条目,如下所示MERGEDATACUSTOMEREMPLOYEEITEMCUSTOMER

客户

123, TESTCUSTOMER

项目

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

所以简而言之,我正在查看触发器中的以下内容:

  • 如何在触发器中写入 IF 条件
  • 如何在触发器中从其他表进行内部联接

请推荐!!

谢谢

4

1 回答 1

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'Action替换为'Update''Delete'

我遇到的问题是:

  • Item应该将哪些列存储到哪个列中MergeData
  • 你的专栏Item或大部分INT- 你的专栏MergeDataVarchar- 你想在这里应用什么样的“转换”?

有关更多详细信息,请参阅出色的 SQL Server 联机丛书文档(免费提供!)CREATE TRIGGER

于 2013-01-15T05:59:44.703 回答