外键错误(长度问题)

时间:2017-05-19 04:41:06

标签: sql-server

这是我的代码。

CREATE TABLE CATEGORY 
(
    CategoryNo int IDENTITY(1,1) NOT NULL,
    AutoIncCategoryNo AS 'CAT' + RIGHT('00000' + CAST(CategoryNo AS VARCHAR(5)),5) PERSISTED,
    CategoryName varchar(100) NOT NULL,
    PRIMARY KEY (AutoIncCategoryNo)
);

CREATE TABLE PRODUCT 
(
    ProductNo int IDENTITY(1,1) NOT NULL,
    AutoIncProduct AS 'P' + RIGHT('00000' + CAST(ProductNo AS VARCHAR(5)),5) PERSISTED,
    ProductName varchar(100) NOT NULL,
    CategoryCode VARCHAR(5),
    UnitPrice decimal(6,2),
    PRIMARY KEY (AutoIncProduct),
    CONSTRAINT CategoryCode_Constraint
    FOREIGN KEY (CategoryCode)
    REFERENCES CATEGORY(AutoIncCategoryNo) 
);

我有2个表,如上所示。这是我得到的错误。

  

列'CATEGORY.AutoIncCategoryNo'与长度或比例不同   在外键中引用列'PRODUCT.CategoryCode'   'CategoryCode_Constraint'。参与外键的列   必须以相同的长度和比例定义关系。

我该如何解决?

2 个答案:

答案 0 :(得分:1)

当您在此时创建外键约束时,请确保列数据类型和大小相等。试试这个。

CREATE TABLE CATEGORY (
    CategoryNo int IDENTITY(1,1) NOT NULL,
    AutoIncCategoryNo AS 'CAT' + RIGHT('00000' + CAST(CategoryNo AS VARCHAR(5)),5) PERSISTED,
    CategoryName varchar(100) NOT NULL,
    PRIMARY KEY (AutoIncCategoryNo)
);

    CREATE TABLE PRODUCT (
    ProductNo int IDENTITY(1,1) NOT NULL,
    AutoIncProduct AS 'P' + RIGHT('00000' + CAST(ProductNo AS VARCHAR(5)),5) PERSISTED,
    ProductName varchar(100) NOT NULL,
    CategoryCode VARCHAR(8),
    UnitPrice decimal(6,2),
    PRIMARY KEY (AutoIncProduct),
    CONSTRAINT CategoryCode_Constraint
    FOREIGN KEY (CategoryCode)
    REFERENCES CATEGORY(AutoIncCategoryNo) 
);

答案 1 :(得分:0)

您正在添加' CAT'使用CATEGORY.AutoIncCategoryNo列中的Varchar(5)

但是PRODUCT.CategoryCode是VARCHAR(5)。 你必须把它作为VARCHAR(8)。