触发器插入 - 防止插入重复的 ID

时间:2021-07-17 02:56:46

标签: sql sql-server tsql triggers

我从以前的 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

1 个答案:

答案 0 :(得分:0)

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