1

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

所以我想做的是创建一个触发器,在插入表 A 时将检查插入的内容是否在表 B 中,如果是,则不要将其插入任何表中,只需忽略插入,否则继续插入进入表 A。

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

假设我有表 A 和表 B。表 B 由“名称”和“地址”组成。表 A 包含“名称”、“地址”、“最喜欢的颜色”和大约 3-4 个其他列。

我想在表 A 中插入“Sue”、“PO Box 1 Lunar Avenue”、“Grey”等。但是低调地,表 B 中已经有一个“Sue”、“PO Box 1 Lunar Avenue”组合,所以我想忽略该插入并继续。

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

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

提前感谢您的回答!^^

4

2 回答 2

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 的问题。

于 2012-05-30T07:08:31.497 回答
0

查看INSTEAD OF触发器,它允许您在 INSERT 发生之前采取行动:

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

  • 忽略批次的一部分。
  • 不处理批次的一部分并记录问题行。
  • 遇到错误情况时采取替代操作。
于 2012-05-30T04:17:33.803 回答