2013-03-06 167 views
1

我正在创建一系列具有ddls表的数据库,并且共有13个表。当我为TBNSOR_VICTIM表运行ddl时,出现外键约束错误。 ddl能够创建第一个fk约束,但创建第二个fk约束时出现错误。有人可以帮我解决问题吗?或者指出我在脚本中缺少什么?这是错误时运行DDL脚本SQL Server 2008外键约束错误

消息1776,级别16,状态0,2号线后得到
有在引用表“dbo.TBNSOR_OFFENSE”匹配,没有主或候选键外键引用列列表“RD09RD03”

CREATE TABLE [dbo].[TBNSOR_OFFENSE](
    [RD03_RC27SEQ_NBR] [int] NOT NULL, 
    [FK_RD01_RC17SID] [int] NOT NULL, 
    [RD03_RC27OFFENSE_DESC] [varchar] (100) NULL, 
    [RD03_STATUTE] [char](6) NULL, 
    [RD03_RC27PREDATOR_IND] [char] (1) NULL, 
    [RD03_RC27CONVICTION_DT] [date] NULL, 
    [RD03_RC27CONVICT_CITY] [varchar] (20) NULL, 
    [RD03_RC27CONVICT_STATE] [char] (2) NULL, 
    [RD03_RC27CONVICT_COUNTY] [varchar] (20) NULL, 
    [RD03_RC27CITY] [varchar] (20) NULL, 
    [RD03_RC27COUNTY] [varchar] (20) NULL, 
    [RD03_RC27OFFENSE_STATE] [char] (2) NULL, 
    [RD03_RC27OFFENSE_DATE] [date] NULL, 
    [RD03_RC27CONFIN_REL_DT] [date] NULL, 
    [RD03_RC27PP_RELEASE_DT] [date] NULL, 
CONSTRAINT [CJ38ID03] PRIMARY KEY CLUSTERED 
(
    [RD03_RC27SEQ_NBR] ASC, 
    [FK_RD01_RC17SID] 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].[TBNSOR_OFFENSE] WITH CHECK ADD CONSTRAINT [RD03RD01] FOREIGN KEY([FK_RD01_RC17SID]) 
REFERENCES [dbo].[TBNSOR_PHYSCSC] ([RD01_RC17SID])ON DELETE CASCADE 
GO 

ALTER TABLE [dbo].[TBNSOR_OFFENSE] CHECK CONSTRAINT [RD03RD01] 
GO 

    CREATE TABLE [dbo].[TBNSOR_VICTIM](
    [RD09_RC28SEQ_NUM] [int] NOT NULL, 
    [FK_RD01_RC17SID] [int] NOT NULL, 
    [FK_RD03_RC27SEQ_NBR] [int] NOT NULL, 
    [RD09_RC28SEX] [char] (1) NULL, 
    [RD09_RC28RACE] [char] (1) NULL, 
    [RD09_RC28AGE] [char](2) NULL, 
    [RD09_RC28HIGH_AGE] [char] (2) NULL, 
    [RD09_RC28LOW_AGE] [char] (2) NULL, 
CONSTRAINT [CJ38ID09] PRIMARY KEY CLUSTERED 
(
    [RD09_RC28SEQ_NUM] ASC, 
    [FK_RD01_RC17SID] ASC, 
    [FK_RD03_RC27SEQ_NBR] 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].[TBNSOR_VICTIM] WITH CHECK ADD CONSTRAINT [RD09RD01] FOREIGN KEY([FK_RD01_RC17SID]) 
REFERENCES [dbo].[TBNSOR_PHYSCSC] ([RD01_RC17SID])ON DELETE CASCADE 
GO 

ALTER TABLE [dbo].[TBNSOR_VICTIM] CHECK CONSTRAINT [RD09RD01] 
GO 

ALTER TABLE [dbo].[TBNSOR_VICTIM] WITH CHECK ADD CONSTRAINT [RD09RD03] FOREIGN KEY([FK_RD03_RC27SEQ_NBR]) 
REFERENCES [dbo].[TBNSOR_OFFENSE]([RD03_RC27SEQ_NBR])ON DELETE CASCADE 
GO 

ALTER TABLE [dbo].[TBNSOR_VICTIM] CHECK CONSTRAINT [RD09RD03] 
GO 
+0

的可能重复的[SQL在参照表中没有主或候选键(http://stackoverflow.com/questions/13095216/sql-no-primary-or-candidate-keys -in-the-referenced-table) – Pondlife 2013-03-06 20:07:26

回答

1

你的主键设置在[CJ38TBNSOR_OFFENSE]表中的两列([RD03_RC27SEQ_NBR]和[FK_RD01_RC17SID]),但你引用只是一个他们。 它应该是:

REFERENCES [cj38].[CJ38TBNSOR_OFFENSE]([RD03_RC27SEQ_NBR],[FK_RD01_RC17SID]) 
+2

外键本身也应该由两列而不是一列组成。 – 2013-03-06 18:58:03