我使用Microsoft SQL Server 2014 Express作为数据库服务器。
我有以下两个表,我想在其中创建PK-FK关系。
CREATE TABLE [dbo].[Account]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[ACCOUNTNAME] [nvarchar](max) NOT NULL,
[ACCOUNTTYPE] [int] NOT NULL,
[CREATE_TIMESTAMP] [datetime] NOT NULL,
[LAST_EDIT_TIMESTAMP] [datetime] NOT NULL,
[OPENING_BALANCE] [decimal](18, 2) NOT NULL DEFAULT ((0)),
[OPENING_BALANCE_TYPE] [nvarchar](50) NULL,
CONSTRAINT [PK_dbo.Account]
PRIMARY KEY CLUSTERED ([ID] ASC)
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[Voucher]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[VOUCHERTYPE] [nvarchar](50) NOT NULL,
[VOUCHERNO] [int] NOT NULL,
[DATE] [datetime] NOT NULL,
[AMOUNT] [decimal](18, 2) NOT NULL,
[DRPARTY] [int] NOT NULL,
[CRPARTY] [int] NOT NULL,
[DETAILS] [nvarchar](50) NOT NULL,
[ORIGIN] [nvarchar](50) NULL,
[ORIGINID] [int] NOT NULL,
[ORIGINDETAILS] [nvarchar](max) NULL,
[CREATE_TIMESTAMP] [datetime] NOT NULL DEFAULT ('1900-01-01T00:00:00.000'),
[LAST_EDIT_TIMESTAMP] [datetime] NOT NULL DEFAULT ('1900-01-01T00:00:00.000'),
[TRANSACTION_TYPE] [nvarchar](50) NULL,
CONSTRAINT [PK_dbo.Voucher]
PRIMARY KEY CLUSTERED ([ID] ASC)
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
这是我通过Microsoft SQL Server Management Studio创建FK关系时遇到的错误。两个表都是空的。
'帐户'表已成功保存 '凭证'表 - 无法创建关系'FK_Voucher_Account1'。 ALTER TABLE语句与FOREIGN KEY约束“FK_Voucher_Account1”冲突。冲突发生在数据库“SKUMAR”,表“dbo.Account”,列“ID”
中
我想创建Account.ID -> Voucher.DRPARTY
和Account.ID -> Voucher.CRPARTY
之间的关系,但我无法创建第二个FK关系。
我可以知道如何解决这个问题吗?
答案 0 :(得分:1)
由于Voucher(CRPARTY)
列和Account(Id)
列之间的数据不匹配,外键错误可能会发生冲突。 CRPARTY表中可用的行必须位于“帐户”表中。
使用以下查询验证。
SELECT * FROM Voucher WHERE CRPARTY NOT IN (SELECT Id FROM Account);
我能够创造2个FK到1个PK。 http://rextester.com/WMAT80057
答案 1 :(得分:1)
您可以删除表之间的FK关系,并使用此脚本创建它们。希望您的表格没有不匹配的数据。
ALTER TABLE [dbo]. [Voucher] WITH CHECK ADD CONSTRAINT [FK_ACCOUNT_ID_VOUCHER_DRPARTY] FOREIGN KEY ([DRPARTY]) REFERENCES [dbo]. [Account]([ID])
GO
ALTER TABLE [dbo]. [Voucher] CHECK CONSTRAINT [FK_ACCOUNT_ID_VOUCHER_DRPARTY]
GO
ALTER TABLE [dbo]. [Voucher] WITH CHECK ADD CONSTRAINT [FK_ACCOUNT_ID_VOUCHER_CRPARTY] FOREIGN KEY ([CRPARTY]) REFERENCES [dbo]. [Account]([ID])
GO
ALTER TABLE [dbo]. [Voucher] CHECK CONSTRAINT [FK_ACCOUNT_ID_VOUCHER_CRPARTY]
GO