Sql server SQL-INSERT语句与外键约束冲突-父表中已存在值

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

我知道这个问题被问了一百万次,但我已经检查、加倍和加倍了相应的值是否已经存在于我的父表中。我正在尝试在我的专辑和艺术家之间填充一个桥接表,两者都已填充。在自动填充的C#程序中出现错误后,我尝试手动插入单个值,但仍然出现插入错误

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