引用表中没有与外键中的引用列列表匹配的主键或候选键

问题描述 投票:0回答:1

我正在使用 SQL Express 19,每次尝试创建与表的外键关系时,我都会收到错误消息。 我得到的错误如下

引用表“Dimension.FinanceSummaryAccounts”中没有主键或候选键 匹配外键“FK_FinanceSummaryAccounts_FinanceChartOfAccounts”中的引用列列表。 无法创建约束或索引。查看以前的错误

错误来自 SQL 脚本的最后两行

CONSTRAINT [FK_FinanceSummaryAccounts_FinanceChartOfAccounts] 外键([SummaryAccountID]) 参考文献 [维度].FinanceSummaryAccounts

你能指导我解决这个问题吗?

这是我的sql脚本,另外我附上了表格和错误的图表图像。

-- CREATE SCHEMA [History] AUTHORIZATION [dbo];
-- CREATE SCHEMA [Dimension] AUTHORIZATION [dbo];
-- CREATE SCHEMA [Fact] AUTHORIZATION [dbo];

CREATE TABLE [Dimension].[FinanceSummaryCategories]
(
    [SummaryCategoryID] INT NOT NULL CONSTRAINT [PK_SummaryCategoryID] Primary Key IDENTITY,
    [SummaryCategorySortID] MONEY NOT NULL DEFAULT 0,
    [SummaryCategory] NVARCHAR(75) NOT NULL, 
    [Note] NVARCHAR(250) NULL, 
    [ModifiedBy] NVARCHAR(250) NULL, 
    [ModifiedOn] DATETIME NULL DEFAULT GetDate(), 
    [CreatedBy] NVARCHAR(250) NULL, 
    [CreatedOn] DATETIME NULL DEFAULT GetDate(),     
)
GO

CREATE TABLE [Dimension].[FinanceSummaryAccounts]
(
    [SummaryAccountID] INT NOT NULL IDENTITY(1,1),     
    -- [SummaryAccountID] INT NOT NULL,     
    [SummaryCategoryID] INT NOT NULL,
    [SummaryAccountSortID] MONEY NOT NULL DEFAULT 0, 
    [SummaryAccount] NVARCHAR(75) NOT NULL, 
    [Format] NVARCHAR(500) NOT NULL DEFAULT '#,0',
    [ModifiedBy] NVARCHAR(250) NULL, 
    [ModifiedOn] DATETIME NULL DEFAULT GetDate(), 
    [CreatedBy] NVARCHAR(250) NULL, 
    [CreatedOn] DATETIME NULL DEFAULT GetDate()
    CONSTRAINT [PK_SummaryAccountID] PRIMARY KEY NONCLUSTERED
    (
        [SummaryAccountID] ASC, 
        [SummaryCategoryID] ASC    
    )
    ,
    CONSTRAINT [FK_FinanceSummaryCategories_FinanceSummaryAccounts] FOREIGN KEY([SummaryCategoryID]) 
    REFERENCES [Dimension].[FinanceSummaryCategories]([SummaryCategoryID])
)
GO

CREATE TABLE [Dimension].[FinanceCOASources]
(
    [COASourceID] INT NOT NULL IDENTITY(1,1), 
    [COASourceSortID] MONEY NOT NULL DEFAULT 0,  
    [COASource] NVARCHAR(100) NOT NULL, 
    [ModifiedBy] NVARCHAR(250) NULL, 
    [ModifiedOn] DATETIME NULL DEFAULT GetDate(), 
    [CreatedBy] NVARCHAR(250) NULL, 
    [CreatedOn] DATETIME NULL DEFAULT GetDate(), 
    CONSTRAINT [PK_FinanceCOASources] PRIMARY KEY CLUSTERED
    (
        [COASourceID] ASC
    )        
)
GO

CREATE TABLE [Dimension].[FinanceChartOfAccounts]
(
    [AccountID] INT NOT NULL, 
    [COASourceID] INT NOT NULL, 
    [AccountSortID] MONEY NOT NULL, 
    [AccountDescription] NVARCHAR(250) NOT NULL, 
    [SummaryAccountID] INT NOT NULL, 
    [Active] BIT NOT NULL DEFAULT 1, 
    [Header01] INT NOT NULL, 
    [Header02] INT NOT NULL, 
    [Header03] INT NOT NULL, 
    [Header04] INT NOT NULL, 
    [Header05] INT NOT NULL, 
    [ActualOperator] NVARCHAR(50) NOT NULL DEFAULT '*', 
    [ActualNumber] MONEY NOT NULL DEFAULT 1,
    [BudgetOperator] NVARCHAR(50) NOT NULL DEFAULT '*', 
    [BudgetNumber] MONEY NOT NULL DEFAULT 1,
    [ForecastOperator] NVARCHAR(50) NOT NULL DEFAULT '*', 
    [ForecastNumber] MONEY NOT NULL DEFAULT 1,
    [ModifiedBy] NVARCHAR(250) NULL, 
    [ModifiedOn] DATETIME NULL DEFAULT GetDate(), 
    [CreatedBy] NVARCHAR(250) NULL, 
    [CreatedOn] DATETIME NULL DEFAULT GetDate(),
    CONSTRAINT [PK_FinanceChartOfAccounts] PRIMARY KEY CLUSTERED
    (
        [AccountID] ASC, 
        [SummaryAccountID] ASC, 
        [COASourceID] ASC
    )
    ,
    CONSTRAINT [FK_FinanceCOASources_FinanceChartOfAccounts] FOREIGN KEY([COASourceID])
    REFERENCES [Dimension].[FinanceCOASources]([COASourceID])
    ,
    CONSTRAINT [FK_FinanceSummaryAccounts_FinanceChartOfAccounts] FOREIGN KEY([SummaryAccountID])
    REFERENCES [Dimension].[FinanceSummaryAccounts]([SummaryAccountID])
)
GO
    

谢谢

sql sql-server foreign-keys
1个回答
0
投票

错误似乎很清楚:just

FinanceSummaryAccounts(SummaryAccountID)
上没有主键,因此您不能创建仅指向该列的外键。

© www.soinside.com 2019 - 2024. All rights reserved.