1

パーティション設定を使用して親/子テーブル スキームを作成した後、外部キーを作成する際に問題が発生します。

CREATE TABLE [dbo].[MessageHeader]
   ([MessageHeaderID] [int] IDENTITY(1,1) NOT NULL,
    [MessageHeaderGlobalId] [uniqueidentifier] NULL,
    [CreatedDateTime] [datetime] NOT NULL
   )
GO

ALTER TABLE [dbo].[MessageHeader]
ADD CONSTRAINT [PC_MessageHeader_CreatedDateTime_1] 
PRIMARY KEY CLUSTERED ([MessageHeaderID], [CreatedDateTime] ASC)
WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = OFF) 
ON [PS_Monthly] ([CreatedDatetime])

CREATE TABLE [dbo].[MessageDataInfo]
    ([MessageDataInfoID] [int] IDENTITY(1,1) NOT NULL,
     [MessageHeaderID] [int] NOT NULL,
     [CreatedDateTime] [datetime] NOT NULL)
GO

ALTER TABLE [dbo].[MessageDataInfo] 
ADD CONSTRAINT [PC__CreatedDateTime_1] 
PRIMARY KEY CLUSTERED ([MessageDataInfoID], [CreatedDateTime])
WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = OFF) 
    ON [PS_Monthly] ([CreatedDatetime])
GO

ALTER TABLE [dbo].[MessageDataInfo]  WITH CHECK 
    ADD  CONSTRAINT [FK_HeaderID] 
    FOREIGN KEY([MessageHeaderID]) 
    REFERENCES [dbo].[MessageHeader] ([MessageHeaderID])

何が起こるかというと、次のエラーが表示されます。

メッセージ 1776、レベル 16、状態 0、行 1
参照テーブル 'dbo.MessageHeader' には、外部キー 'FK_HeaderID' の参照列リストと一致する主キーまたは候補キーがありません。

その列が明らかに主キーであるため、なぜこれが起こっているのかわかりません! どんな助けでも大歓迎です。

4

2 に答える 2

6

親テーブルの主キーの一部にのみ外部キーを作成しようとしています。外部キーを作成するには、主キー全体を使用する必要があります。

于 2013-08-19T16:59:37.643 に答える
0

外部キーは単一の列を参照していますが、MessageHeader の主キーは複合です。おそらくそうするつもりはないので、主キーを作成するステートメント (最初の ALTER TABLE のもの) から CreatedDateTime を削除します。

于 2013-08-19T17:05:07.520 に答える