2013-12-12 36 views
1

我有一個表(SQL Server 2008)與複合主鍵。如何防止這種行爲?:SQL Server管理工作室 - 複合主鍵

insert into myTable values ('A','B') 
insert into myTable values ('B','A') 

我用獨特的限制和WITH_IGNORE_DUP_KEYS嘗試,但我解決不了。

提前致謝!

回答

2

由於SQL Server不允許函數的索引,一個解決辦法是強制插入這樣的「小」一個總是存儲在第一列的值:

alter table myTable add constraint chk_pk 
    check (col1_1 <= col_2); 

如果你不這樣做像這樣的(因爲你不希望力值的一個特殊的「命令」插入過程中),您需要定義兩個計算列,並在其上創建唯一索引:

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); 
+0

非常感謝你。 – Docu

1

我想插入之前,您可以檢查是否合併「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 

存在,也可以定義約束。

感謝您的好問題。

相關問題