【发布时间】:2020-07-15 04:57:13
【问题描述】:
谁能告诉我为什么会出现这个错误并在这里发现我的错误?
我阅读了错误消息,但我无法发现不同的数据类型?我错过了什么?
CREATE TABLE STAFF (
StaffLastname NVARCHAR(100) NOT NULL,
StaffFirstName NVARCHAR(100) NOT NULL,
StaffID NVARCHAR(100) NOT NULL,
PRIMARY KEY (StaffID)
);
CREATE TABLE WAREHOUSE(
WarehouseLocation NVARCHAR(100) NOT NULL,
PRIMARY KEY (WarehouseLocation)
);
CREATE TABLE CUSTOMER (
CustomerID NVARCHAR(50),
CustomerName NVARCHAR(100) NOT NULL,
CustomerAddress NVARCHAR(100) NOT NULL,
CustomerCity NVARCHAR(100) NOT NULL,
PRIMARY KEY (CustomerID)
);
CREATE TABLE COURSE (
CourseID NVARCHAR(25),
CourseName NVARCHAR(100) NOT NULL,
PRIMARY KEY (CourseID)
);
CREATE TABLE COURSE_OFFERING (
WarehouseLocation NVARCHAR(100) NOT NULL,
CourseID NVARCHAR(25) NOT NULL,
CourseDate DATE CHECK (LEN(CourseDate) = 8),
PRIMARY KEY (WarehouseLocation,CourseID,CourseDate),
FOREIGN KEY (CourseID) REFERENCES COURSE,
FOREIGN KEY (WarehouseLocation) REFERENCES WAREHOUSE
);
CREATE TABLE BOOKING (
CustomerID NVARCHAR(50) NOT NULL,
WarehouseLocation NVARCHAR(100) NOT NULL,
CourseID NVARCHAR(25) NOT NULL,
CourseDate DATE CHECK (LEN(CourseDate) = 8),
BookingDate DATE CHECK (LEN(BookingDate) = 8),
PaymentAmount MONEY CHECK (PaymentAmount > 0) NOT NULL,
Review NVARCHAR(100) NULL,
PRIMARY KEY (CustomerID, WarehouseLocation, CourseID, CourseDate),
FOREIGN KEY (WarehouseLocation, CourseID, CourseDate) REFERENCES COURSE_OFFERING,
FOREIGN KEY (CustomerID) REFERENCES CUSTOMER
);
CREATE TABLE STAFF_ALLOCATION (
StaffID NVARCHAR(100) NOT NULL,
CourseDate DATE CHECK (LEN(CourseDate) = 8),
WarehouseLocation NVARCHAR(100) NOT NULL,
CourseID NVARCHAR(25) NOT NULL,
PRIMARY KEY (StaffID, CourseDate, CourseID, WarehouseLocation),
FOREIGN KEY (StaffID) REFERENCES STAFF,
FOREIGN KEY (CourseDate, WarehouseLocation, CourseID) REFERENCES COURSE_OFFERING
);
ERROR MSG - - -- - - - - - - - - - -
(受影响的 1 行) 消息 1778,级别 16,状态 0,第 65 行列“COURSE_OFFERING.WarehouseLocation”与数据类型不同 在外键中引用列“STAFF_ALLOCATION.CourseDate” 'FK__STAFF_ALLOCATION__5D60DB10'。
消息 1750,级别 16,状态 1,第 65 行无法创建约束或 指数。查看以前的错误。
【问题讨论】:
-
我认为由于默认情况下您没有指定父表的引用列名,因此它采用 COURSE_OFFERING 中列定义的顺序。
-
解决方法有两种,1.在STAFF_ALLOCATION表中提及外引用列名
REFERENCES COURSE_OFFERING (CourseDate, WarehouseLocation, CourseID)。 2. 将 STAFF_ALLOCATION 中的列顺序更改为 COURSE_OFFERING 即 WAREHOUSELOCATION、COURSEID、COURSEDATE -
选项 2 - 与我的回答有什么不同吗?
-
@antonio_mg 您不必删除您的答案,只是想检查该答案是否还有其他内容...干杯!
-
只是出于好奇:为什么您对
date列有检查约束?
标签: sql sql-server azure