Sql server SQLServer2005中的外键

Sql server SQLServer2005中的外键,sql-server,foreign-keys,Sql Server,Foreign Keys,我在sql 2005中创建外键时遇到问题 我的主键表有一个横跨两列的主键 我想创建外键,以便它引用主表中的一列,但我想为第二列指定一个静态值-这可能吗?不,您不能这样做-如果您从子表引用父表,则必须引用父表中主键的所有列: ALTER TABLE dbo.ChildTable ADD CONSTRAINT FK_ChildTable_ParentTable FOREIGN KEY (col1, col2) REFERENCES dbo.ParentTable(pkCol1, pkCol2

我在sql 2005中创建外键时遇到问题

我的主键表有一个横跨两列的主键


我想创建外键,以便它引用主表中的一列,但我想为第二列指定一个静态值-这可能吗?

不,您不能这样做-如果您从子表引用父表,则必须引用父表中主键的所有列:

ALTER TABLE dbo.ChildTable
  ADD CONSTRAINT FK_ChildTable_ParentTable
  FOREIGN KEY (col1, col2) REFERENCES dbo.ParentTable(pkCol1, pkCol2)
您不能突然在引用中引入“静态”值

您可以对子表执行的操作是在第二列上放置一个CHECK约束,使其成为“静态”值,但在该列中永远不能有任何其他值:

ALTER TABLE dbo.ChildTable
  ADD CONSTRAINT chk_col2_Static CHECK (col2 = 4)

这就是您要找的吗???

能否向我们展示这两个表的表结构,以及您如何尝试创建外键?谢谢您的回答。我很乐意引用主键的所有列—只是我想为第二列指定一个静态值。e、 g主表商品id类型名称1水果苹果2水果橙3蔬菜胡萝卜。。。我可能希望在只强制水果类型的列上使用外键。因此,外键将引用id列,但类型为的次主键列也应约束为FROUT。当使用带有“type”描述符列的“generic”表存储不同的things@Bal:也许吧,但在我看来,这是一个相当糟糕的设计。我不知道如何将其指定为外键约束。我看到的唯一实际选项是仅在SQL Server 2008中—在主表的一列上有一个唯一的筛选索引,其中第二列为=1—然后可以从子表引用该筛选的唯一索引。这有点像黑客,但可能会奏效。