【问题标题】:Create these tables: Could not create constraint or index: Datatype mismatch创建这些表:无法创建约束或索引:数据类型不匹配
【发布时间】: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


【解决方案1】:

在您的最后一个表中,您有一个外键,它有 3 列,数据类型的顺序如下: 日期、NVARCHAR、NVARCHAR

并且他们引用了一个包含 3 列的表,这些列具有以下数据类型的顺序:

NVARCHAR、NVARCHAR、日期

如果您将最后一张表更改为:

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 (WarehouseLocation, CourseID, CourseDate) REFERENCES COURSE_OFFERING

一切都会好起来的,就像在这个demo中一样

【讨论】:

    【解决方案2】:

    调整 COURSE OFFERING 表中 PRIMARY KEY 中列与 STAFF_ALLOCATION 表中 FOREIGN KEY 中列的顺序。 因为之前, WarehouseLocation, CourseID, CourseDate = NVARCHAR, NVARCHAR, DATE at COURSE OFFERING CourseDate, WarehouseLocation, CourseID = DATE, NVARCHAR, NVARCHAR

    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)
    );
    
    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 (WarehouseLocation,CourseID,CourseDate) REFERENCES COURSE_OFFERING
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-12
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多