现创建如下的表
create table table_A(
id int not null,
name1 varchar(30) not null,
name2 varchar(30)) not null,
constraint PK_table_A primary key nonclustered (id)
)
我想让name1,name2是唯一的,而且是与列的顺序无关,例如
当执行如下两条语句时
insert into A values(100,2,3)
insert into A values(101,3,2)
我期望达到的效果是,执行第二条语句时,会报错,提示违反唯一约束请问我该怎么做呢PS:当我加入ALTER TABLE table_A
ADD CONSTRAINT table_A_Name UNIQUE (name1,name2)
语句后,无法达到期望的效果

解决方案 »

  1.   

    ALTER TABLE table_A
    ADD CONSTRAINT table_A_Name UNIQUE name1ALTER TABLE table_A
    ADD CONSTRAINT table_A_Name UNIQUE name2
      

  2.   


    create table table_A(
    id int not null,
    name1 varchar(30) not null unique,
    name2 varchar(30)) not null unique,
    constraint PK_table_A primary key nonclustered (id)
    )
      

  3.   

    分别建立唯一约束还是不行。执行
    insert into A values(100,2,3)
    insert into A values(101,3,2)
    两条语句后,还是不会报错我想要唯一的集合,而默认建立的唯一约束是序列,跟列的顺序有关
      

  4.   

    我再补充一下,我希望执行
    insert into A values(100,2,3)
    insert into A values(101,3,2)
    会报错,而执行
    insert into A values(100,2,3)
    insert into A values(101,2,4)
    不会报错
    分别建立唯一约束,会使得执行
    insert into A values(100,2,3)
    insert into A values(101,2,4)
    都会报错
      

  5.   

    我自己解决了,方法是执行ALTER TABLE table_A
    ADD CONSTRAINT table_A_Name UNIQUE (name1,name2)
    后再创一个触发器,功能是当name1=inserted.name2 and name2=inserted.name1时回滚,否则正常插入