Tsql 创建复合外键约束

Tsql 创建复合外键约束,tsql,foreign-keys,constraints,composite-key,Tsql,Foreign Keys,Constraints,Composite Key,我正在尝试创建复合外键关系/约束。所有的桌子都空了。我有这张桌子: 创建表[dbo]。[ChemSampleValueTest]( [SampleNumber][int]不为空, [ParameterID][int]不为空, [值][数字](18,6)不为空, [准确度][varchar](50)空, [ResultGroupID][int]不为空, [QAState][nvarchar](32)不为空, 约束[PK_SampleValueTest]主键群集 ( [SampleNumber]AS

我正在尝试创建复合外键关系/约束。所有的桌子都空了。我有这张桌子:

创建表[dbo]。[ChemSampleValueTest](
[SampleNumber][int]不为空,
[ParameterID][int]不为空,
[值][数字](18,6)不为空,
[准确度][varchar](50)空,
[ResultGroupID][int]不为空,
[QAState][nvarchar](32)不为空,
约束[PK_SampleValueTest]主键群集
(
[SampleNumber]ASC,
[参数]ASC,
[结果组ID]ASC
)
)在[小学]
下表:

创建表[dbo]。[ChemSampleValueEventLinkTest](
[Event][int]不为空,
[SampleNumber][int]不为空,
[ResultGroupID][int]不为空,
[ParameterID][int]不为空,
[QAState][nvarchar](32)空
)在[小学]
我想这样把它们联系起来:

alter table[ChemSampleValueEventLinkTest]添加
约束FK_ChemSampleValueEvent_ChemSampleValue_测试
外键([SampleNumber]、[ResultGroupID]、[ParameterID])
参考ChemSampleValueTest([SampleNumber]、[ResultGroupID]、[ParameterID])
据我所知,所有列类型都是相同的,但它一直在说

引用的表中没有主键或候选键 与外键中的引用列列表匹配的“ChemSampleValueTest” “FK_ChemSampleValue事件_ChemSampleValue_测试”


我哪里出错了?

看起来您需要按照PK定义中出现的相同顺序设置FK/参考列表

这应该起作用:

CREATE TABLE [dbo].[ChemSampleValueTest](
    [SampleNumber] [int] NOT NULL,
    [ParameterID] [int] NOT NULL,
    [Value] [numeric](18, 6) NOT NULL,
    [Accuracy] [varchar](50) NULL,
    [ResultGroupID] [int] NOT NULL,
    [QAState] [nvarchar](32) NOT NULL,
     CONSTRAINT [PK_SampleValueTest] PRIMARY KEY CLUSTERED 
    (
        [SampleNumber] ASC,
        [ParameterID] ASC,
        [ResultGroupID] ASC
    )
) ON [PRIMARY]

CREATE TABLE [dbo].[ChemSampleValueEventLinkTest](
    [Event] [int] NOT NULL,
    [SampleNumber] [int] NOT NULL,
    [ResultGroupID] [int] NOT NULL,
    [ParameterID] [int] NOT NULL,
    [QAState] [nvarchar](32) NULL
) ON [PRIMARY]

alter table [ChemSampleValueEventLinkTest] add 
    constraint FK_ChemSampleValueEvent_ChemSampleValue_test
    foreign key ([SampleNumber], [ParameterID], [ResultGroupID]) 
    references ChemSampleValueTest ([SampleNumber], [ParameterID], [ResultGroupID])

这里有一些类似的问题(主要是关于违反约束的问题),但我找不到任何对我有帮助的东西。你是对的。想想看,这是有道理的。复合外键。思想弯曲,但开始有意义。谢谢你的帮助,伙计。