sql - 错误的 SQL 语法;')' 附近的语法不正确
问题描述
我正在使用连接到 Azure SQL 数据库的 Microsoft SQL Server Management Studio;通常,我习惯于使用 Oracle(我猜这只是一个菜鸟错误)。我到底做错了什么?这些是我收到的错误消息:
消息 102,级别 15,状态 1,第 11 行
')' 附近的语法不正确。消息 102,级别 15,状态 1,第 42 行
')' 附近的语法不正确。消息 102,级别 15,状态 1,第 54 行
')' 附近的语法不正确。消息 102,级别 15,状态 1,第 66 行
')' 附近的语法不正确。
这是我的代码:
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)
);
解决方案
这些外键引用了哪些其他表/列?您需要提供该信息!
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)
);
如果您需要禁用或删除它们,这使得引用这些约束变得非常容易。
推荐阅读
- r - 在R中打破for循环的问题
- java - Springboot & Thymeleaf : HTML -> PDF 转换
- css - 在各种设备上断开到下一行的单词/字母
- java - 音频延迟-Java程序到Android程序
- c - C | 套接字不接受通过 telnet 的连接
- sql - 将文本答案转化为二分变量
- reactjs - 做出反应。使用 react-router 重新渲染的基本示例。+100 代表
- python - 如何使用 tkinter 创建下拉列表并将其设置在特定的行/列中?(Python)
- docker - 无法在 Docker 上恢复 nuget 包
- python - Python-打印第n级子列表