好的,我今天早些时候搜索了2小时的大部分时间,但无法找到我的问题的答案。所以我会试着看看你们是否都可以帮助我。
所以我想要做的是创建一个触发器,插入到表A中将检查是否在表B中插入了什么,如果是,那么不要将其插入任何表中,只需忽略插入,否则继续插入表A.
例如,[实际上与我的问题非常相似,只是不同的名字等]
说我有表A和表B.表B包括说“名称”和“地址”。表A包含“名称”,“地址”,“最喜欢的颜色”以及大约3-4个misc列。
我想在表A中插入“苏”,“邮政信箱1月球大道”,“灰色”等等。但是很少看到已有“苏”,“邮政箱1月球大道”组合在表B中,所以我想忽略该插入并继续。
“名称”或“地址”都不是任何类型的键,除了表上有一个约束,不允许任何“名称”和“地址”组合重复。
我使用SQL Server 2008 R2作为参考点。
提前感谢您的回答! ^^
答案 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触发器可以执行以下操作:
- 忽略批次的部分内容。
- 不处理批次的一部分并记录问题行。
- 遇到错误情况时采取替代措施。