我有一個表(SQL Server 2008)與複合主鍵。如何防止這種行爲?:SQL Server管理工作室 - 複合主鍵
insert into myTable values ('A','B')
insert into myTable values ('B','A')
我用獨特的限制和WITH_IGNORE_DUP_KEYS嘗試,但我解決不了。
提前致謝!
我有一個表(SQL Server 2008)與複合主鍵。如何防止這種行爲?:SQL Server管理工作室 - 複合主鍵
insert into myTable values ('A','B')
insert into myTable values ('B','A')
我用獨特的限制和WITH_IGNORE_DUP_KEYS嘗試,但我解決不了。
提前致謝!
由於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);
我想插入之前,您可以檢查是否合併「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
存在,也可以定義約束。
感謝您的好問題。
非常感謝你。 – Docu