2014-01-09 24 views
0

我尝试在SQL Server 2008中, 创建数据库,并得到这个错误:错误创建SQL Server中的DB时(循环或多个级联路径)

Msg 1785, Level 16, State 0, Line 34

Introducing FOREIGN KEY constraint 'Viewers_FK1' on table 'Viewers' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Msg 1750, Level 16, State 0, Line 34 Could not create constraint. See previous errors.

这是我的SQL查询:

CREATE DATABASE [ShemenHD]; 


GO 
USE [DBNAME1] 
GO 
CREATE TABLE Users( 
UserName VARCHAR(50) PRIMARY KEY, 
FullName VARCHAR(50) NOT NULL, 
PhoneNum1 VARCHAR(20) , 
PhoneNum2 VARCHAR(20) 
); 


CREATE TABLE Category( 
CategoryNum VARCHAR(15) PRIMARY KEY, 
CategoryName VARCHAR(30) NOT NULL 
); 


CREATE TABLE Request( 
RequestNum VARCHAR(30) PRIMARY KEY, 
RequestCreator VARCHAR(50) NOT NULL, 
RequestCategory VARCHAR(15), 
RequestSubject VARCHAR(250) NOT NULL, 
RequestContent VARCHAR(2000) , 
RequestOpenDate datetime NOT NULL, 
RequestCloseDate datetime , 
RequestSLA datetime , 
RequestStatus VARCHAR(50) , 
RequestPriority VARCHAR(50) , 
IsProject BIT NOT NULL, 
RequestFile VARCHAR(500) , 


constraint Request_FK foreign key (RequestCreator) references Users (UserName) ON DELETE NO ACTION ON UPDATE CASCADE, 
constraint Request1_FK foreign key (RequestCategory) references Category (CategoryNum) ON DELETE NO ACTION ON UPDATE CASCADE 
); 

CREATE TABLE Viewers(
UserName VARCHAR(50) , 
RequestNum VARCHAR(30) 

constraint Viewers_PK PRIMARY KEY (UserName, RequestNum), 
constraint Viewers_FK foreign key (UserName) references Users(UserName) ON DELETE NO ACTION ON UPDATE CASCADE, 
constraint Viewers_FK1 foreign key (RequestNum) references Request(RequestNum) ON DELETE NO ACTION ON UPDATE CASCADE 
); 

CREATE TABLE AdminNotes (
NoteNumber VARCHAR(10) , 
RequestNum VARCHAR(30) , 
NoteCreator VARCHAR(50), 
NoteContent VARCHAR(2000) NOT NULL, 

constraint AdminNotes_PK PRIMARY KEY (NoteNumber, RequestNum), 
constraint AdminNotes_FK foreign key (RequestNum) references Request(RequestNum) ON DELETE NO ACTION ON UPDATE CASCADE , 
constraint AdminNotes_FK1 foreign key (NoteCreator) references Users(UserName) ON DELETE NO ACTION ON UPDATE CASCADE 

); 


CREATE TABLE RequestMessage (
MessageNumber VARCHAR(10) , 
RequestNum VARCHAR(30) , 
MessageCreator VARCHAR(50), 
MessageContent VARCHAR(2000) NOT NULL, 

constraint RequestMessage_PK PRIMARY KEY (MessageNumber, RequestNum), 
constraint RequestMessage_FK foreign key (RequestNum) references Request(RequestNum) ON DELETE NO ACTION ON UPDATE CASCADE , 
constraint RequestMessage_FK1 foreign key (MessageCreator) references Users(UserName) ON DELETE NO ACTION ON UPDATE CASCADE 

); 

什么问题?我只想在更新时级联,这是循环的原因? ,我该如何解决它?

谢谢!

+0

该消息很清楚:)你不能指定多个基于相同的主外键级联。我测试并给你更多的细节 –

回答

1

你好,这里是带有注释的固定代码: 正如你所解释的,你不能在多个表中使用同一列作为外键并且做级联,你只能级联一次。

CREATE DATABASE [DBNAME1]; 


GO 
USE [DBNAME1] 
GO 
CREATE TABLE Users( 
UserName VARCHAR(50) PRIMARY KEY, 
FullName VARCHAR(50) NOT NULL, 
PhoneNum1 VARCHAR(20) , 
PhoneNum2 VARCHAR(20) 
); 


CREATE TABLE Category( 
CategoryNum VARCHAR(15) PRIMARY KEY, 
CategoryName VARCHAR(30) NOT NULL 
); 


CREATE TABLE Request( 
RequestNum VARCHAR(30) PRIMARY KEY, 
RequestCreator VARCHAR(50) NOT NULL, 
RequestCategory VARCHAR(15), 
RequestSubject VARCHAR(250) NOT NULL, 
RequestContent VARCHAR(2000) , 
RequestOpenDate datetime NOT NULL, 
RequestCloseDate datetime , 
RequestSLA datetime , 
RequestStatus VARCHAR(50) , 
RequestPriority VARCHAR(50) , 
IsProject BIT NOT NULL, 
RequestFile VARCHAR(500) , 


constraint Request_FK foreign key (RequestCreator) references Users (UserName) ON DELETE NO ACTION ON UPDATE CASCADE, 
constraint Request1_FK foreign key (RequestCategory) references Category (CategoryNum) ON DELETE NO ACTION ON UPDATE CASCADE 
); 

CREATE TABLE Viewers(
UserName VARCHAR(50) , 
RequestNum VARCHAR(30) 

constraint Viewers_PK PRIMARY KEY (UserName, RequestNum), 
--constraint Viewers_FK foreign key (UserName) references Users(UserName) ON DELETE NO ACTION ON UPDATE CASCADE, -- This cause error 
constraint Viewers_FK foreign key (UserName) references Users(UserName) ON DELETE NO ACTION ON UPDATE NO ACTION, 
constraint Viewers_FK1 foreign key (RequestNum) references Request(RequestNum) ON DELETE NO ACTION ON UPDATE CASCADE 
); 

CREATE TABLE AdminNotes (
NoteNumber VARCHAR(10) , 
RequestNum VARCHAR(30) , 
NoteCreator VARCHAR(50), 
NoteContent VARCHAR(2000) NOT NULL, 

constraint AdminNotes_PK PRIMARY KEY (NoteNumber, RequestNum), 
--constraint AdminNotes_FK foreign key (RequestNum) references Request(RequestNum) ON DELETE NO ACTION ON UPDATE CASCADE , --This cause error 
--constraint AdminNotes_FK1 foreign key (NoteCreator) references Users(UserName) ON DELETE NO ACTION ON UPDATE CASCADE --This cause error 
constraint AdminNotes_FK foreign key (RequestNum) references Request(RequestNum) ON DELETE NO ACTION ON UPDATE NO ACTION , 
constraint AdminNotes_FK1 foreign key (NoteCreator) references Users(UserName) ON DELETE NO ACTION ON UPDATE NO ACTION 

); 


CREATE TABLE RequestMessage (
MessageNumber VARCHAR(10) , 
RequestNum VARCHAR(30) , 
MessageCreator VARCHAR(50), 
MessageContent VARCHAR(2000) NOT NULL, 

constraint RequestMessage_PK PRIMARY KEY (MessageNumber, RequestNum), 
--constraint RequestMessage_FK foreign key (RequestNum) references Request(RequestNum) ON DELETE NO ACTION ON UPDATE CASCADE , --This cause error 
--constraint RequestMessage_FK1 foreign key (MessageCreator) references Users(UserName) ON DELETE NO ACTION ON UPDATE CASCADE --This cause error 
constraint RequestMessage_FK foreign key (RequestNum) references Request(RequestNum) ON DELETE NO ACTION ON UPDATE NO ACTION , 
constraint RequestMessage_FK1 foreign key (MessageCreator) references Users(UserName) ON DELETE NO ACTION ON UPDATE NO ACTION 

); 
相关问题