检查(插入期间)建筑物是否始终具有相同的地址

时间:2016-11-20 17:10:51

标签: sql sql-server

我正在编写一个INSTEAD OF INSERT触发器,用于在插入之前验证数据。

为了简化我的问题:请将此视为我的插入内容:

INSERT INTO Event 
VALUES ('A', 'building1', 'adress1'),
       ('B', 'building2', 'adress2'),
       ('C', 'building1', 'adress3')

我需要捕获INSERTED表包含具有不同地址的相同建筑物的情况 - 这是不可能的。

一些IF语句摘要会对我有所帮助。

2 个答案:

答案 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