如何创建触发器以仅在插入的内容不在另一个表中时才允许插入

时间:2012-05-29 23:23:52

标签: sql sql-server-2008

好的,我今天早些时候搜索了2小时的大部分时间,但无法找到我的问题的答案。所以我会试着看看你们是否都可以帮助我。

所以我想要做的是创建一个触发器,插入到表A中将检查是否在表B中插入了什么,如果是,那么不要将其插入任何表中,只需忽略插入,否则继续插入表A.

例如,[实际上与我的问题非常相似,只是不同的名字等]

说我有表A和表B.表B包括说“名称”和“地址”。表A包含“名称”,“地址”,“最喜欢的颜色”以及大约3-4个misc列。

我想在表A中插入“苏”,“邮政信箱1月球大道”,“灰色”等等。但是很少看到已有“苏”,“邮政箱1月球大道”组合在表B中,所以我想忽略该插入并继续。

“名称”或“地址”都不是任何类型的键,除了表上有一个约束,不允许任何“名称”和“地址”组合重复。

我使用SQL Server 2008 R2作为参考点。

提前感谢您的回答! ^^

2 个答案:

答案 0 :(得分:3)

有些事情:

CREATE TRIGGER T_TableA_I
ON TableA
INSTEAD OF INSERT
AS
     INSERT INTO TableA (Name,Address,/* Other columns */)
     SELECT i.Name,i.Address,/* Other columns from inserted */
     FROM
         inserted i
             left join
         TableB b
             on
                 i.Name = b.Name and
                 i.Address = b.Address
     WHERE
         b.Name is null --So the join was unsuccessful.

但是我仍然担心后来插入TabelB是否需要处理。

答案 1 :(得分:0)

查看INSTEAD OF触发器,这些触发器允许您在INSERT发生之前采取措施:

  

INSTEAD OF触发器可以执行以下操作:

     
      
  • 忽略批次的部分内容。
  •   
  • 不处理批次的一部分并记录问题行。
  •   
  • 遇到错误情况时采取替代措施。
  •