【发布时间】: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