SQL Server环境下Prisma删除带默认值列后执行db push报错怎么解决
问题修复方案
这个报错是Prisma 3.3.0版本对接SQL Server的已知缺陷:删除带默认值的字段时,不会自动前置删除关联的默认值约束,需要手动处理,两种可行方案如下:
方案1:直接操作数据库删除约束(最快)
- 连接到你的SQL Server业务库,执行SQL删除对应约束:
ALTER TABLE users DROP CONSTRAINT users_role_df;
注意如果你的User模型自定义了
@@map映射表名,需要把上面SQL中的users替换为实际的表名
- 回到项目目录重新执行
npm prisma db push,即可正常删除role字段
方案2:分两次执行db push,无需手动操作数据库
- 第一步:先仅删除schema.prisma中role字段的
@default("USER")注解,保留role String定义,执行一次npm prisma db push,这一步Prisma会自动删除users_role_df默认值约束 - 第二步:再把role字段从User模型中完全移除,再次执行
npm prisma db push即可完成字段删除
长期规避建议
升级Prisma到4.0及以上版本,该SQL Server默认值约束的处理缺陷已经在后续版本修复,不会再出现同类报错。
内容的提问来源于stack exchange,提问作者shmuels
相关产品推荐
相关产品推荐

