我不想根据以下标准在表格中允许重复
例如: 我有
ID Number AdditionalID
1 458 1234 <-- 458 must be allow
2 458 1234 <-- 458 must be allow
3 458 123456 <-- 458 must not be allowed because additionalID is different
4,459,123456&lt; - 必须允许。(正确的)
答案 0 :(得分:2)
解决此问题的最佳方法是规范化您的数据。目前,您正在存储相同的,单个事实多个次。因此,我会将Number
和AdditionalID
之间的关系移到单独的表 1 中,并从当前表中删除AdditionalID
。
但如果你坚持不改变结构,我们可以用indexed view完成这个:
create table dbo.T (
ID int IDENTITY(1,1) not null,
Number int not null,
AdditionalID int not null
)
go
create view dbo.DRI_T
with schemabinding
as
select
Number,
AdditionalID,
COUNT_BIG(*) as Cnt
from
dbo.T
group by Number,AdditionalID
go
create unique clustered index IX_DRI_T_UniqueAdditionalIDPerNumber on dbo.DRI_T (Number)
go
insert into T(Number,AdditionalID) values
(458,1234),
(458,1234)
go
insert into T(Number,AdditionalID) values
(458,123456) --<-- This insert fails
go
insert into T(Number,AdditionalID) values
(459 ,123456)
这是如何工作的?我们创建一个视图,每个Number
和AdditionalID
列的唯一组合将包含一行。但后来我们声明此视图的关键是只是 Number
列。实际上,我们实际上只允许为每个Number
值存储一个这样的组合。
1 在该单独的表中,Number
将是主键,因此当然只有一个AdditionalID
可以与每个Number
相关联。事实上,它非常类似于此处显示的索引视图,除了它不需要Cnt
列,这仅在此处需要,因为它要求在索引中GROUP BY
{{1}}图。
答案 1 :(得分:1)
不知道“附加ID”如何允许数字的完整解决方案,可能会有几个解决方案。
<强> 1。 Foreing key
如果可能的话,使用外键可能是最好的解决方案。
FindElements()
<强> 2。使用功能
进行检查ALTER TABLE YourTable
ADD FOREIGN KEY (AdditionalID) REFERENCES AllowedAdditionalId(AdditionalID);