Sql server 2008 与多个表具有外键关系的复合主键。SQL Server 2008错误 使用[Fk_Test2] 去 /******对象:表[dbo].[Owners]脚本日期:08/20/2010 16:52:44******/ 将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 将ANSI_填充设置为ON 去 创建表[dbo].[Owners]( [Owner][varchar](10)不为空, 约束[PK_Owners]主键群集 ( [所有者]ASC )在[主]上打开(PAD\u INDEX=OFF,STATISTICS\u norecocomputer=OFF,IGNORE\u DUP\u KEY=OFF,ALLOW\u ROW\u LOCKS=ON,ALLOW\u PAGE\u LOCKS=ON) )在[小学] 去 将ANSI_填充设置为关闭 去 /******对象:表[dbo].[Key]脚本日期:08/20/2010 16:49:57******/ 将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 将ANSI_填充设置为ON 去 创建表[dbo]。[Key]( [owner][varchar](10)不为空, [key_id][varchar](10)不为空, [description][varchar](10)不为空, 约束[PK_键]主键群集 ( [所有者]ASC, [密钥id]ASC )在[主]上打开(PAD\u INDEX=OFF,STATISTICS\u norecocomputer=OFF,IGNORE\u DUP\u KEY=OFF,ALLOW\u ROW\u LOCKS=ON,ALLOW\u PAGE\u LOCKS=ON) )在[小学] 去 将ANSI_填充设置为关闭 去 通过选中添加约束[FK\U Key\U Owners]外键([owner])更改表[dbo].[Key] 引用[dbo].[Owners]([Owner]) 去 ALTER TABLE[dbo].[Key]检查约束[FK\U Key\U所有者] 去 /******对象:表[dbo].[Bldg]脚本日期:08/20/2010 16:50:29******/ 将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 将ANSI_填充设置为ON 去 创建表[dbo].[Bldg]( [bldg][varchar](10)不为空, [owner][varchar](10)不为空, 约束[PK_Bldg]主键群集 ( [bldg]ASC, [所有者]ASC )在[主]上打开(PAD\u INDEX=OFF,STATISTICS\u norecocomputer=OFF,IGNORE\u DUP\u KEY=OFF,ALLOW\u ROW\u LOCKS=ON,ALLOW\u PAGE\u LOCKS=ON) )在[小学] 去 将ANSI_填充设置为关闭 去 使用检查添加约束[FK_Bldg_Owners]外键([owner])更改表[dbo].[Bldg] 引用[dbo].[Owners]([Owner]) 去 更改表[dbo].[Bldg]检查约束[FK_Bldg_Owners] 去 /******对象:表[dbo].[KeyToBuilding]脚本日期:08/20/2010 17:13:52******/ 将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 将ANSI_填充设置为ON 去 创建表[dbo]。[KeyToBuilding]( [owner][varchar](10)不为空, [bldg][varchar](10)不为空, [key_id][varchar](10)不为空, 约束[PK_KeyToBuilding]主键群集 ( [所有者]ASC, [bldg]ASC, [密钥id]ASC )在[主]上打开(PAD\u INDEX=OFF,STATISTICS\u norecocomputer=OFF,IGNORE\u DUP\u KEY=OFF,ALLOW\u ROW\u LOCKS=ON,ALLOW\u PAGE\u LOCKS=ON) )在[小学] 去 将ANSI_填充设置为关闭 去 通过选中添加约束[FK_KeyToBuilding_Key]外键([owner],[Key_id])更改表[dbo]。[KeyToBuilding] 引用[dbo].[Key]([owner],[Key\u id]) 去 ALTER TABLE[dbo].[KeyToBuilding]检查约束[FK\U KeyToBuilding\U Key] 去 通过选中添加约束[FK_KeyToBuilding_Bldg]外键([owner],[Bldg])更改表[dbo]。[KeyToBuilding] 参考文献[dbo].[Bldg]([owner],[Bldg]) 去 更改表[dbo].[KeyToBuilding]检查约束[FK_KeyToBuilding_Bldg] 去

Sql server 2008 与多个表具有外键关系的复合主键。SQL Server 2008错误 使用[Fk_Test2] 去 /******对象:表[dbo].[Owners]脚本日期:08/20/2010 16:52:44******/ 将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 将ANSI_填充设置为ON 去 创建表[dbo].[Owners]( [Owner][varchar](10)不为空, 约束[PK_Owners]主键群集 ( [所有者]ASC )在[主]上打开(PAD\u INDEX=OFF,STATISTICS\u norecocomputer=OFF,IGNORE\u DUP\u KEY=OFF,ALLOW\u ROW\u LOCKS=ON,ALLOW\u PAGE\u LOCKS=ON) )在[小学] 去 将ANSI_填充设置为关闭 去 /******对象:表[dbo].[Key]脚本日期:08/20/2010 16:49:57******/ 将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 将ANSI_填充设置为ON 去 创建表[dbo]。[Key]( [owner][varchar](10)不为空, [key_id][varchar](10)不为空, [description][varchar](10)不为空, 约束[PK_键]主键群集 ( [所有者]ASC, [密钥id]ASC )在[主]上打开(PAD\u INDEX=OFF,STATISTICS\u norecocomputer=OFF,IGNORE\u DUP\u KEY=OFF,ALLOW\u ROW\u LOCKS=ON,ALLOW\u PAGE\u LOCKS=ON) )在[小学] 去 将ANSI_填充设置为关闭 去 通过选中添加约束[FK\U Key\U Owners]外键([owner])更改表[dbo].[Key] 引用[dbo].[Owners]([Owner]) 去 ALTER TABLE[dbo].[Key]检查约束[FK\U Key\U所有者] 去 /******对象:表[dbo].[Bldg]脚本日期:08/20/2010 16:50:29******/ 将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 将ANSI_填充设置为ON 去 创建表[dbo].[Bldg]( [bldg][varchar](10)不为空, [owner][varchar](10)不为空, 约束[PK_Bldg]主键群集 ( [bldg]ASC, [所有者]ASC )在[主]上打开(PAD\u INDEX=OFF,STATISTICS\u norecocomputer=OFF,IGNORE\u DUP\u KEY=OFF,ALLOW\u ROW\u LOCKS=ON,ALLOW\u PAGE\u LOCKS=ON) )在[小学] 去 将ANSI_填充设置为关闭 去 使用检查添加约束[FK_Bldg_Owners]外键([owner])更改表[dbo].[Bldg] 引用[dbo].[Owners]([Owner]) 去 更改表[dbo].[Bldg]检查约束[FK_Bldg_Owners] 去 /******对象:表[dbo].[KeyToBuilding]脚本日期:08/20/2010 17:13:52******/ 将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 将ANSI_填充设置为ON 去 创建表[dbo]。[KeyToBuilding]( [owner][varchar](10)不为空, [bldg][varchar](10)不为空, [key_id][varchar](10)不为空, 约束[PK_KeyToBuilding]主键群集 ( [所有者]ASC, [bldg]ASC, [密钥id]ASC )在[主]上打开(PAD\u INDEX=OFF,STATISTICS\u norecocomputer=OFF,IGNORE\u DUP\u KEY=OFF,ALLOW\u ROW\u LOCKS=ON,ALLOW\u PAGE\u LOCKS=ON) )在[小学] 去 将ANSI_填充设置为关闭 去 通过选中添加约束[FK_KeyToBuilding_Key]外键([owner],[Key_id])更改表[dbo]。[KeyToBuilding] 引用[dbo].[Key]([owner],[Key\u id]) 去 ALTER TABLE[dbo].[KeyToBuilding]检查约束[FK\U KeyToBuilding\U Key] 去 通过选中添加约束[FK_KeyToBuilding_Bldg]外键([owner],[Bldg])更改表[dbo]。[KeyToBuilding] 参考文献[dbo].[Bldg]([owner],[Bldg]) 去 更改表[dbo].[KeyToBuilding]检查约束[FK_KeyToBuilding_Bldg] 去,sql-server-2008,database-design,Sql Server 2008,Database Design,每当我尝试设置时,都会出错 “表“键”或“建筑”中的列与现有主键或唯一约束不匹配 我是在试图以错误的方式实现这种关系,还是在做一些愚蠢的事情 该系统用于跟踪不同建筑物的钥匙(物理钥匙)。这就是为什么有钥匙id和钥匙,它们不是数据库钥匙。您应该能够创建它们,您使用什么方法来创建导致错误的关系 可能是你在反向创建它们 还要检查表中是否存在冲突数据。在创建FK关系之前,KeyToBuilding中的所有行都需要位于Bldg和Key中。当所有3个表都没有行时,创建关系最简单。这是语法错误的来源 Bldg

每当我尝试设置时,都会出错 “表“键”或“建筑”中的列与现有主键或唯一约束不匹配

我是在试图以错误的方式实现这种关系,还是在做一些愚蠢的事情


该系统用于跟踪不同建筑物的钥匙(物理钥匙)。这就是为什么有钥匙id和钥匙,它们不是数据库钥匙。

您应该能够创建它们,您使用什么方法来创建导致错误的关系

可能是你在反向创建它们


还要检查表中是否存在冲突数据。在创建FK关系之前,KeyToBuilding中的所有行都需要位于Bldg和Key中。当所有3个表都没有行时,创建关系最简单。

这是语法错误的来源

Bldg表中的主键为:

约束PK_厂房主键(厂房,[业主]) 在
KeyToBuilding
表中,
FK\u KeyToBuilding\u Bldg
您试图引用
([owner],Bldg)
,而不是
(Bldg,[owner])

如果您只需稍微清理一下代码,它会有所帮助,以下代码执行得很好:

创建表dbo.owner(
[owner]varchar(10)不为空
,约束主键所有者主键群集([owner])
) ;
创建表dbo。[键](
[owner]varchar(10)不为空
,key_id varchar(10)不为空
,[description]varchar(10)不为空
,约束[PK\u Key]主键([owner],Key\u id)
) ;
ALTER TABLE dbo。[Key]添加约束FK\U Key\U所有者
外键([owner]引用dbo.owner([owner]);
创建表dbo.Bldg(
建筑物varchar(10)不为空
,[owner]varchar(10)不为空
,约束PK_厂房主键(厂房,[业主])
) ;
更改表dbo.Bldg添加约束FK_Bldg_业主
外键([owner]引用dbo.owner([owner]);
创建表dbo.KeyToBuilding(
[owner]varchar(10)不为空
,建筑物varchar(10)不为空
,key_id varchar(10)不为空
,约束PK_KEY生成主键([owner],KEY_id)
);
更改表dbo.KeyToBuilding ADD
将FK_键约束为Building_键
外键([owner],KEY\u id)引用dbo.[KEY]([owner],KEY\u id)
,将FK_键约束到建筑物
外键(bldg,[业主])参考dbo.bldg(bldg,[业主]);

< /代码>如果您张贴用于创建这些表的实际DDL会更容易。考虑包括与BLDG的关系的所有者表,而KeyI将表的模型更改为实际脚本,我所得到的错误是在FKYKEYToBug构建BLDG上,它表示MSG 1776,级别16,状态0,行2没有主或候选关键字。在与外键“FK_KeyToBuilding_Bldg”中的引用列列表匹配的引用表“dbo.Bldg”中。我正在尝试在sql管理控制台中创建它们。所有表都为空。I USE [Fk_Test2] GO /****** Object: Table [dbo].[Owners] Script Date: 08/20/2010 16:52:44 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Owners]( [Owner] [varchar](10) NOT NULL, CONSTRAINT [PK_Owners] PRIMARY KEY CLUSTERED ( [Owner] 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 SET ANSI_PADDING OFF GO /****** Object: Table [dbo].[Key] Script Date: 08/20/2010 16:49:57 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Key]( [owner] [varchar](10) NOT NULL, [key_id] [varchar](10) NOT NULL, [description] [varchar](10) NOT NULL, CONSTRAINT [PK_Key] PRIMARY KEY CLUSTERED ( [owner] ASC, [key_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 SET ANSI_PADDING OFF GO ALTER TABLE [dbo].[Key] WITH CHECK ADD CONSTRAINT [FK_Key_Owners] FOREIGN KEY([owner]) REFERENCES [dbo].[Owners] ([Owner]) GO ALTER TABLE [dbo].[Key] CHECK CONSTRAINT [FK_Key_Owners] GO /****** Object: Table [dbo].[Bldg] Script Date: 08/20/2010 16:50:29 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Bldg]( [bldg] [varchar](10) NOT NULL, [owner] [varchar](10) NOT NULL, CONSTRAINT [PK_Bldg] PRIMARY KEY CLUSTERED ( [bldg] ASC, [owner] 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 SET ANSI_PADDING OFF GO ALTER TABLE [dbo].[Bldg] WITH CHECK ADD CONSTRAINT [FK_Bldg_Owners] FOREIGN KEY([owner]) REFERENCES [dbo].[Owners] ([Owner]) GO ALTER TABLE [dbo].[Bldg] CHECK CONSTRAINT [FK_Bldg_Owners] GO /****** Object: Table [dbo].[KeyToBuilding] Script Date: 08/20/2010 17:13:52 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[KeyToBuilding]( [owner] [varchar](10) NOT NULL, [bldg] [varchar](10) NOT NULL, [key_id] [varchar](10) NOT NULL, CONSTRAINT [PK_KeyToBuilding] PRIMARY KEY CLUSTERED ( [owner] ASC, [bldg] ASC, [key_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 SET ANSI_PADDING OFF GO ALTER TABLE [dbo].[KeyToBuilding] WITH CHECK ADD CONSTRAINT [FK_KeyToBuilding_Key] FOREIGN KEY([owner], [key_id]) REFERENCES [dbo].[Key] ([owner], [key_id]) GO ALTER TABLE [dbo].[KeyToBuilding] CHECK CONSTRAINT [FK_KeyToBuilding_Key] GO ALTER TABLE [dbo].[KeyToBuilding] WITH CHECK ADD CONSTRAINT [FK_KeyToBuilding_Bldg] FOREIGN KEY([owner], [bldg]) REFERENCES [dbo].[Bldg] ([owner], [bldg]) GO ALTER TABLE [dbo].[KeyToBuilding] CHECK CONSTRAINT [FK_KeyToBuilding_Bldg] GO