T-SQL修改logininfo表主键ID字段数据类型执行失败如何解决
失败原因排查
- ID列是主键约束绑定列,SQL Server 禁止直接修改被主键、外键这类约束关联的字段的数据类型,必须先解除约束才能修改字段属性
- 你编写的修改语句目标类型为
varchar(10),和你实际需要的varchar(20)不匹配,即使无约束也无法达到预期修改效果
正确处理步骤
- 首先查询系统自动生成的主键约束名称(建表时未手动指定约束名的话,系统会生成随机名称),执行以下SQL:
SELECT name FROM sys.key_constraints WHERE type = 'PK' AND parent_object_id = OBJECT_ID('logininfo')
- 删除查询得到的主键约束,示例如下(将示例中的约束名替换为你上一步查询到的实际名称):
ALTER TABLE logininfo DROP CONSTRAINT PK__logininf__3214EC27XXXXXXX;
- 修改ID字段为你需要的
varchar(20)类型,注意主键列必须非空,需要显式声明NOT NULL:
ALTER TABLE logininfo ALTER COLUMN ID varchar(20) NOT NULL;
- 重建主键约束,建议手动指定易读的约束名:
ALTER TABLE logininfo ADD CONSTRAINT PK_logininfo_ID PRIMARY KEY (ID);
注意:如果表内已有存量数据,修改类型时原有int类型的ID值会自动转换为字符串格式,后续插入非数字格式的ID值时需注意避免主键重复。
内容的提问来源于stack exchange,提问作者masuumoe-dev
相关产品推荐
相关产品推荐

