SQL Server跨其他列的唯一列值(在其他表中)

SQL Server跨其他列的唯一列值(在其他表中),sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我正在使用SQLServer2008。我有以下基本模式: 表1(字段1,字段2) 表2(字段3) 我需要Field1是唯一的(允许为空)。我可以这样做: create unique nonclustered index IX_Table1_Field1 on [Table1] (Field1) where Field1 is not null 但是,我还需要Field1在Field2和Field3中是唯一的。i、 e.如果我想在Field1中使用的值正在Field1、Field2或Fie

我正在使用SQLServer2008。我有以下基本模式:

  • 表1
    字段1,字段2
  • 表2
    字段3
我需要
Field1
是唯一的(允许为空)。我可以这样做:

create unique nonclustered index IX_Table1_Field1 
on [Table1] (Field1)
where Field1 is not null
但是,我还需要
Field1
Field2
Field3
中是唯一的。i、 e.如果我想在
Field1
中使用的值正在
Field1、Field2
Field3
中使用,则不允许使用该值


使用索引是否可以实现这一点?(我怎样才能做到这一点?

老实说,这听起来像是一个错误的设计。虽然您所说的理论上可以通过触发器实现,但事实上,您有这样一个不寻常的约束,这表明表可能无法正确建模

如果您解释了两个表和三个字段所代表的内容,我们可能会更好地理解您是如何得出这种设计的,并且可能能够提出替代方案


需要考虑的事项:尽管您只提到了对
Field1
的限制,但通常多字段约束涉及所有字段。
Field2
是否也受字段1、2和3的限制?那么
字段3
呢?对如何更改或删除记录有任何限制吗

如果可以出现在
字段1
中的值的“域”与可以出现在
字段2
字段3
中的值的域相同,则表明表设计错误,应该只有一列包含这些值(可能还有一个或多个区分其他特征的附加列)我不相信没有重新排列表格或使用触发器就可以做到这一点。@Joachim Isaksson如果你知道如何使用触发器,我愿意通过其他方式接受建议。谢谢。@Damien_不信者这是一个好观点。我必须检查“Field2”和“Field3”的完整用法看看他们是否真的是同一件事。。。