【问题标题】:Trigger insert - prevent inserting duplicate ID触发插入 - 防止插入重复 ID
【发布时间】:2021-09-25 17:36:33
【问题描述】:

我从以前的BI Analyst那里继承了一个数据库,其中大多数缺少PK和FK,并且包含大量数据。我触发了 防止插入多个 OLD ID 的表之一。

我的问题是,即使 OLD_ID 不存在,它仍然会抛出 RAISERROR 消息。有人可以指导我吗?

另外,如何在UPDATE上应用这个?

CREATE TRIGGER TRIG_DUP_OUTLET 
ON  Outlets
INSTEAD  OF  INSERT
AS

if NOT exists ( 
                select  DISTINCT A.OLD_ID
                from Outlets A
                left join inserted B
                on A.OLD_ID = B.OLD_ID 
                                    )
                begin
                    insert into  RDOutlets 
                    select _ID  ,   OLD_ID  ,BRANCH_NAME    
                    ,ADDRESS,   PROVINCE    ,CITY    
                    CREATE_DATE
                    from inserted
                end
else 

                begin
                    rollback
                    RAISERROR ('Duplicate OLD ID', 16, 1);
                end
go

【问题讨论】:

  • 将 LEFT JOIN 替换为 INNER JOIN 以确保如果插入的 OLD_ID 与 Outlets.OLD_ID 匹配,则不会返回任何行
  • 完成。 @JohnD 但仍然无法正常工作。
  • 请与创建表和插入数据脚本共享示例数据。
  • 嗨@JohnD..它有效!我也禁用和启用触发器 :) 谢谢!
  • 为什么不使用唯一/主键

标签: sql sql-server tsql triggers


【解决方案1】:

LEFT JOIN 更新为INNER JOIN,然后禁用并重新启用触发器。

【讨论】:

    猜你喜欢
    • 2017-04-26
    • 2015-08-07
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2011-05-14
    • 1970-01-01
    • 2016-02-19
    相关资源
    最近更新 更多