删除具有非空约束的列

64 阅读1分钟

创建一张表

CREATE TABLE AccessInfo
(
	AccessionNo VARCHAR NOT NULL,
	HospitalCode VARCHAR NOT NULL,
	ProcedureOffice VARCHAR NOT NULL,
	FilmCount int DEFAULT 1,
	PrintStatus VARCHAR DEFAULT '1',
	PrintTime DATETIME
)

新增一列

ALTER TABLE AccessInfo ADD IdCardNo VARCHAR NOT NULL DEFAULT '';

删除一列

ALTER TABLE AccessInfo DROP COLUMN IdCardNo;

screenshot-20221122-160943.png

错误原因

在 SQL Server 中如果一列具有以下条件,那么无法直接删除

  • 列是主键
  • 列是外键
  • 列有默认值

IdCardNo 有默认值,所以无法直接删除。

解决方案

首先删除默认值约束,然后再删除列。但是,如何删除默认值约束?在删除报错信息中有默认值约束。在上面的错误信息中有这样一行 对象'DF__AccessInf__IdCar__300424B4' 依赖于 列'IdCardNo'。默认值约束名就是 DF__AccessInf__IdCar__300424B4

  • 删除约束 ALTER TABLE AccessInfo DROP CONSTRAINT DF__AccessInf__IdCar__300424B4;
  • 删除列 ALTER TABLE AccessInfo DROP COLUMN IdCardNo;