Здравствуйте?
Не могу создать базу от книги "SQL. Полное руководство 2015"
Столкнулся с проблемой
Ошибка Msg 102, Level 15, State 1, Line 8 Incorrect syntax near 'HASMGR'.
CREATE TABLE PRODUCTS
(MFR_ID CHAR(3) NOT NULL,
PRODUCT_ID CHAR(5) NOT NULL,
DESCRIPTION VARCHAR(20) NOT NULL,
PRICE DECIMAL(9,2) NOT NULL,
QTY_ON_HAND INTEGER NOT NULL,
primary key (MFR_ID, PRODUCT_ID));
CREATE TABLE OFFICES
(OFFICE INTEGER NOT NULL,
CITY VARCHAR(15) NOT NULL,
REGION VARCHAR(10) NOT NULL,
MGR integer, TARGET DECIMAL(9,2),
SALES DECIMAL(9,2) NOT NULL,
primary key (OFFICE),
foreign key HASMGR(MGR)
references SALEREPS
ON DELETE SET NULL);
CREATE TABLE SALEREPS
(EMPL_NUM INTEGER NOT NULL,
AGE INTEGER,
REP_OFFICE integer,
TITLE VARCHAR(10),
HIRE_DATE DATE NOT NULL,
MANAGER integer,
QUOTA DECIMAL (9,2),
SALES DECIMAL (9,2) NOT NULL,
primary key (EMPL_NUM),
foreign key (MANAGER)
references SALESREPS
ON DELETE SET NULL,
foreign key WORKSIN (REP_OFFICE)
references OFFICES
ON delete SET NULL);
create TABLE CUSTOMERS
(CUST_NUM INTEGER NOT NULL,
COMPANY VARCHAR (20) NOT NULL,
CUST_REP INTEGER,
CREDIT_LIMIT DECIMAL(9,2),
primary key (CUST_NUM),
foreign key HASREP (CUST_REP)
references SALESREPS
ON delete SET null);
CREATE TABLE ORDERS
(ORDER_NUM INTEGER NOT NULL,
ORDER_DATE DATE NOT NULL,
CUST INTEGER NOT NULL,
REP INTEGER,
MFR CHAR(3) NOT NULL,
PRODUCT CHAR(5) NOT NULL,
QTY INTEGER NOT NULL,
AMOUNT DECIMAL (9,2) NOT NULL,
primary key (ORDER_NUM),
foreign key PLACEDBY (CUST)
references CUSTOMERS
ON DELETE CASCADE,
foreign key TAKENBY (REP)
references SALEREPS
ON DELETE SET NULL,
foreign key ISFOR (MFR, PRODUCT)
REFERENCES PRODUCTS
ON DELETE RESTRICT);
Создал таблицы без ключей и с командой ALTER создаю ключи тоже такая же ошибка
Таблица, на которую ссылается внешний ключ, должна существовать на момент создания ключа (т.е. должна быть создана ранее).
То есть надо бы изменить порядок создания таблиц. Сначала создать SALEREPS, и только потом OFFICES...
---
Но вообще структура какая-то бредовая. Одна таблица имеет FK на другую, которая имеет FK на первую... как-то логики совсем не прослеживается.
И просто пересортировкой порядка создания таблиц такое не лечится. Сначала все таблицы, потом все внешние ключи - единственное решение... но сперва надо разобраться с логикой зависимостей таблиц.
---
И это... всегда указывайте точно поле, на которое должен ссылаться внешний ключ. Не надейтесь на умолчания.