我正在编写一个INSTEAD OF INSERT
触发器,用于在插入之前验证数据。
为了简化我的问题:请将此视为我的插入内容:
INSERT INTO Event
VALUES ('A', 'building1', 'adress1'),
('B', 'building2', 'adress2'),
('C', 'building1', 'adress3')
我需要捕获INSERTED表包含具有不同地址的相同建筑物的情况 - 这是不可能的。
一些IF
语句摘要会对我有所帮助。
答案 0 :(得分:2)
为什么要使用触发器?问题是您的数据模型。
如果建筑物只能有一个地址,那么您应该有一个名为Buildings
的表:
create table Buildings (
BuildingId int identity primary key,
BuildingName varchar(255),
Address varchar(255)
);
然后,您的Events
表应引用BuildingId
:
create table Events (
EventId int identity primary key,
EventName varchar(255) unique,
BuildingId int references Buildings(BuildingId)
);
您不应该使用触发器来解决数据模型的问题。
答案 1 :(得分:1)
最佳解决方案由 Gordon 提供。如果无法对结构进行规范化,则可以考虑Unique Index
对2列building, address
的组合。如果这也不是一个选项,你真的需要创建一个触发器:
if exists(select building
from inserted
group by building
having count(distinct address) > 1)
begin
--your logic here
end