Sql server SQL SERVER仅在其他列值存在差异时唯一

Sql server SQL SERVER仅在其他列值存在差异时唯一,sql-server,Sql Server,我需要帮助表设计与具体的独特术语。 这张桌子看起来像这样 id --> Primary key auto generate type1 --> varchar(20) type2 --> varchar(20) code --> int 代码列是唯一的,但仅当列type2具有相同的值时才允许相同的值 1 xyz freedom 6773 2 asd freedom 6773 3 rty prison 6773 --> not allowed 4

我需要帮助表设计与具体的独特术语。 这张桌子看起来像这样

id --> Primary key auto generate
type1 --> varchar(20)
type2 --> varchar(20)
code --> int
代码列是唯一的,但仅当列type2具有相同的值时才允许相同的值

1  xyz  freedom  6773
2  asd  freedom  6773
3  rty  prison   6773 --> not allowed
4  pop  prison   7809

只要您想插入相同的值,就不能将代码定义为唯一列


对于您的情况,我建议删除id(自动增加主键)并将type02+代码作为复合主键。

如果您希望允许相同的值,即使存在条件(甚至不可能将条件放入索引),也不能使列唯一


您需要在应用程序中处理验证。

作为变量,您可以将附加表与(代码,类型2)的所有可能组合一起使用


我希望我正确地理解了您的要求。

我认为触发器在您的情况下可能有用……下面是一个伪代码

create trigger trg_test
on table1
after insert
as
begin

if exists(
Select  * from inserted  i
          join
          tab1e1 t1
          on t1.code=i.code and i.type2<>t1.type2
          )
Rollback;
end
下面的代码成功

insert into table1
values
('prison',6774)

我认为这可以在服务器端代码上完成,而不是在数据库中完成。虽然我不确定sql server是否提供了这些功能,但在向该表插入任何数据时,我会通过在服务器端编程来实现这些情况。
insert into table1
values
('prison',6773)
insert into table1
values
('prison',6774)