无法在表 'tp_ladder'

时间:2021-05-04 02:37:07

标签: sql sql-server ddl

我正在尝试运行以下 SQL 语句

--dropping customer TABLE--
DROP TABLE tp_ladder;

--creating ladder TABLE
CREATE TABLE tp_ladder (
    ladder_id         INTEGER,
    ladder_type       VARCHAR(50),
    ladder_name       VARCHAR(50) NOT NULL,
    ladder_discount   DECIMAL(3,2),
    ladder_price      DECIMAL(8,2) NOT NULL,
    ladder_weight     DECIMAL(5,2),
    ladder_height     DECIMAL(5,2),
    ladder_rating     DECIMAL(10,2),
    warehouse_id      INTEGER    
);

--creating primary key for ladder table
ALTER TABLE tp_ladder

ADD CONSTRAINT tp_ladder_ladder_id
PRIMARY KEY(ladder_id);

但是我收到错误消息:

<块引用>

无法在表 'tp_ladder' 中的可空列上定义 PRIMARY KEY 约束

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

错误很明显,但为什么会出错却不是很明显。

其他数据库(例如 MySQL 和 Postgres)确实允许您做您想做的事——在未明确声明为 NOT NULL 的列上添加主键。毕竟,PRIMARY KEY 也强加了 NOT NULL 约束。这令人惊讶,尤其是在一张空桌子上。所以,错误并不明显。

此外,SQL Server 存储所有列的空标志,即使是那些声明为 NOT NULL 的列。因此,即使有数据,数据也不需要更改(假设没有 NULL 值)。并非所有数据库都以相同的方式存储 NULL 标志。

如果您已经定义了表,您可以使用以下方法修改列:

ALTER TABLE tp_ladder ALTER COLUMN ladder_id INT NOT NULL

这将允许您添加主键约束。

但是,我建议您在创建表时内嵌:

ladder_id INT PRIMARY KEY

请注意,在 CREATE TABLE 中定义时,不需要 NOT NULL(实际上是多余的)。

相关问题