我正在使用连接到Azure SQL数据库的Microsoft SQL Server Management Studio;通常,我习惯于使用Oracle(我猜这只是一个菜鸟错误)。我到底在做什么错?这些是我收到的错误消息:
第15级州立1行11的消息102
')'附近的语法不正确。第15层状态1,第42行,Msg 102
')'附近的语法不正确。第15层状态1的第54行,消息102
')'附近的语法不正确。第15级州立1号线66消息102
')'附近的语法不正确。
这是我的代码:
CREATE TABLE ElectiveCourses
(
ElectiveCourseID INT,
ElectiveCoursePrefix CHAR(5),
ElectiveCourseCode INT,
ElectiveCreditHours INT,
ElectiveCourseDescription VARCHAR(255),
CatalogYearID INT,
MajorID INT,
PRIMARY KEY (ElectiveCourseID),
FOREIGN KEY (CatalogYearID, MajorID)
);
CREATE TABLE Major
(
MajorID INT,
MajorTitle VARCHAR(50),
MajorCode INT,
MajorLevel CHAR(5),
MajorDescription VARCHAR(255),
PRIMARY KEY (MajorID)
);
CREATE TABLE CatalogYear
(
CatalogYearID INT,
CatalogYear VARCHAR(10),
CatalogYearStartTerm VARCHAR(10),
CatalogYearEndTerm VARCHAR(10),
PRIMARY KEY (CatalogYearID)
);
CREATE TABLE Student
(
StudentID INT,
FirstName CHAR(25),
LastName CHAR(10),
MajorID INT,
CatalogYearID INT,
PhoneNumber VARCHAR(15),
AreaCode INT,
Address VARCHAR(50),
State CHAR(50),
PRIMARY KEY (StudentID),
FOREIGN KEY (MajorID, CatalogYearID)
);
CREATE TABLE MajorCourses
(
MajorCourseID INT,
MajorCoursePrefix CHAR(5),
MajorCourseCode INT,
MajorCreditHours INT,
MajorCourseDescription VARCHAR(255),
CatalogYearID INT,
MajorID INT,
PRIMARY KEY (MajorCourseID),
FOREIGN KEY (CatalogYearID, MajorID)
);
CREATE TABLE Courses
(
CourseID INT,
CoursePrefix CHAR (5),
CourseCode INT,
CreditHours INT,
CourseDescription VARCHAR(255),
CatalogYearID INT,
MajorID INT,
PRIMARY KEY (CourseID),
FOREIGN KEY (CatalogYearID, MajorID)
);
答案 0 :(得分:2)
其他个表/列是什么?您需要提供该信息!
CREATE TABLE ElectiveCourses
(
.... all the columns ......
PRIMARY KEY (ElectiveCourseID),
FOREIGN KEY (CatalogYearID, MajorID) **REFERENCES dbo.OtherTable(col1, col2)**
);
此外,这些引用必须与另一个表的完整的主键匹配-您不能仅引用(复合)主键的一部分。外键中列的名称,顺序和数据类型必须完全匹配所引用表的主键。
在您的示例中,我没有找到其他任何包含由(CatalogYearID, MajorID)
构成的主键的表-因此这里的引用(以及其他一些引用)还是不清楚的。
另外,请注意:我会强烈推荐明确命名您的约束条件:
CREATE TABLE dbo.ElectiveCourses
(
.... all the columns ......
CONSTRAINT PK_ElectiveCourses
PRIMARY KEY CLUSTERED (ElectiveCourseID),
CONSTRAINT FK_ElectiveCourses_OtherTable
FOREIGN KEY (CatalogYearID, MajorID)
REFERENCES dbo.OtherTable(col1, col2)
);
如果需要的话,引用这些约束变得非常容易。禁用或删除它们。