Неправильный синтаксис SQL;Неверный синтаксис рядом с ')' - PullRequest
0 голосов
/ 20 января 2019

Я использую Microsoft SQL Server Management Studio, которая подключена к базе данных Azure SQL;Обычно я привык использовать Oracle (это просто ошибка новичка, я думаю).Что именно я делаю не так?Это сообщения об ошибках, которые я получаю:

Сообщение 102, Уровень 15, Состояние 1, Строка 11
Неверный синтаксис рядом с ')'.

Сообщение 102,Уровень 15, состояние 1, строка 42
неправильный синтаксис рядом с ')'.

Msg 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)
);

1 Ответ

0 голосов
/ 20 января 2019

ЧТО другие таблицы / столбцы ссылаются на эти внешние ключи ??Вы должны предоставить эту информацию!

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

Это значительно упрощает ссылки на эти ограничения, если вам когда-либо понадобится, например, отключить или удалить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...