Sql server SQL-INSERT语句与外键约束冲突-父表中已存在值
我知道这个问题被问了一百万次,但我已经检查、加倍和加倍了相应的值是否已经存在于我的父表中。我正在尝试在我的专辑和艺术家之间填充一个桥接表,两者都已填充。在自动填充的C#程序中出现错误后,我尝试手动插入单个值,但仍然出现插入错误Sql server SQL-INSERT语句与外键约束冲突-父表中已存在值,sql-server,insert,sql-insert,Sql Server,Insert,Sql Insert,我知道这个问题被问了一百万次,但我已经检查、加倍和加倍了相应的值是否已经存在于我的父表中。我正在尝试在我的专辑和艺术家之间填充一个桥接表,两者都已填充。在自动填充的C#程序中出现错误后,我尝试手动插入单个值,但仍然出现插入错误 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Album]( [Album ID] [int] IDENTITY(1,1) NOT NULL, [Album Tit
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Album](
[Album ID] [int] IDENTITY(1,1) NOT NULL,
[Album Title] [nchar](50) NOT NULL,
[Release Year] [int] NULL,
CONSTRAINT [PK_Album] PRIMARY KEY CLUSTERED
(
[Album ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Album-Artists] Script Date: 3/6/2015 12:49:33 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Album-Artists](
[Album ID] [int] NOT NULL,
[Artist ID] [int] NOT NULL,
CONSTRAINT [PK_Album-Artists] PRIMARY KEY CLUSTERED
(
[Album ID] ASC,
[Artist ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Artists] Script Date: 3/6/2015 12:49:33 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Artists](
[Artist ID] [int] IDENTITY(1,1) NOT NULL,
[Artists Name] [nchar](20) NOT NULL,
CONSTRAINT [PK_Artists] PRIMARY KEY CLUSTERED
(
[Artist ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
GO
ALTER TABLE [dbo].[Album-Artists] WITH CHECK ADD CONSTRAINT [FK_Album-Artists_Album] FOREIGN KEY([Album ID])
REFERENCES [dbo].[Album] ([Album ID])
GO
ALTER TABLE [dbo].[Album-Artists] CHECK CONSTRAINT [FK_Album-Artists_Album]
GO
ALTER TABLE [dbo].[Album-Artists] WITH CHECK ADD CONSTRAINT [FK_Album-Artists_Artists] FOREIGN KEY([Album ID])
REFERENCES [dbo].[Artists] ([Artist ID])
GO
ALTER TABLE [dbo].[Album-Artists] CHECK CONSTRAINT [FK_Album-Artists_Artists]
GO
(我尝试过使用和不使用表量词(艺术家。[艺术家ID]等))您的外键正在尝试将ArtistId与AlbumId匹配 这是不正确的。你需要重新创建它
ALTER TABLE dbo.[Album-Artists]
DROP CONSTRAINT [FK_Album-Artists_Artists];
ALTER TABLE [dbo].[Album-Artists]
WITH CHECK ADD CONSTRAINT [FK_Album-Artists_Artists]
FOREIGN KEY([Artist ID]) REFERENCES [dbo].[Artists] ([Artist ID]);
插入的正确语法也是
INSERT INTO [dbo].[Album-Artists]
([Album ID], [Artist ID])
VALUES (10, 3);
不过
最后,我将避免在对象名称中使用空格或-
,这样您就不必继续使用带引号的标识符或方括号,并且可以使用不带引号的形式
INSERT INTO dbo.AlbumArtists
(AlbumId, ArtistId)
VALUES (10, 3);
请编写所有相关表的定义(包括约束定义)的脚本,并将其添加到问题中。生成脚本并将其放入不包含外键的部分,以便我们查看它们是否配置正确。在SSMS中选择数据库并使用“任务->生成脚本”,它应该是其中的一个选项。或者在树状视图中找到外键
FK_Album-Artists_Artists
,只需单独编写脚本,就像错误消息中的脚本一样。外键([Album ID])引用[dbo]。[Artists]([Artister ID])
非常感谢。我有点恼火,因为它最终变得如此愚蠢,但这似乎就是它的方式XD