我有一个带有复合主键的表( Server 2008)。我怎样才能防止这种行为?
insert into myTable values ('A','B')
insert into myTable values ('B','A')我尝试了独特的限制和WITH_IGNORE_DUP_KEYS,但我无法解决它。
提前感谢!
发布于 2013-12-12 08:01:11
由于Server不允许基于函数的索引,一种解决方案是强制插入值,以便“较小”的值总是存储在第一列中:
alter table myTable add constraint chk_pk
check (col1_1 <= col_2);如果您不喜欢这样(因为您不希望在insert期间强制对值进行特殊的“排序”),则需要定义两个计算列并在它们上创建一个唯一的索引:
ALTER TABLE myTable ADD
min_pk AS case when col_1 < col_2 then col_1 else col_2 end,
max_pk AS case when col_1 > col_2 then col_1 else col_2 end;
CREATE UNIQUE INDEX idx_unique_pk ON myTable (min_pk, max_pk);发布于 2013-12-12 07:59:19
我认为在插入之前,您可以检查两列中是否存在组合“B”和“A”
Declare @t1 table(col1 varchar(2),col2 varchar(2))
insert into @t1 values('A','B')
if not exists(select col1 from @t1 where ((col1='B' or Col1='A') and (col2='B' or Col2='A')))
insert into @t1 values('B','A')
select * from @t1或者你可以定义约束。
谢谢你的好问题。
https://stackoverflow.com/questions/20537766
复制相似问题