如何确保一个表只有一个记录,每个Customer_Number的Is_Deleted = 0?

时间:2016-11-27 19:26:53

标签: sql sql-server triggers

我有一个包含这些列的表:

ID (int)
Customer_Number (int)
Is_Deleted (bit)
Details (nvarchar)

我需要为表格创建一个触发器,以便在尝试从“真实”列中更改Is_Deleted列时阻止更新行。到'假'虽然已经在Is_Deleted上拥有另一个具有相同客户编号和错误值的不同现有行(我不能允许false中具有Is_Deleted值的相同客户编号的两行}专栏)。

1 个答案:

答案 0 :(得分:5)

没有触发器。

create unique index t_ix_Customer_Number_Is_Deleted_0 
on t (Customer_Number) 
where Is_Deleted = 0
insert into t (ID,Customer_Number,Is_Deleted) values (1,1,1),(2,1,0),(3,1,1),(4,1,1)
  

(4行(s)受影响)

update t set Is_Deleted = 0 where ID = 1
  

Msg 2601,Level 14,State 1,Line 5
  无法插入重复的键行   具有唯一索引't_ix_Customer_Number_Is_Deleted_0'的对象'dbo.t'。   重复键值为(1)   声明已经终止。