错误的SQL语法; ')'

时间:2019-01-19 21:39:53

标签: sql azure-sql-database

我正在使用连接到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)
);

1 个答案:

答案 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)
);

如果需要的话,引用这些约束变得非常容易。禁用或删除它们。