为了账号安全,请及时绑定邮箱和手机立即绑定

使用 mssql 方言通过迁移向枚举添加新值

使用 mssql 方言通过迁移向枚举添加新值

萧十郎 2021-12-23 16:49:05
我正在尝试使用 sequelize 创建迁移,该迁移将为枚举添加新值。我们正在使用 SQL-Server 并在 sequelize 配置中将方言设置为“mssql”。这是我编写的未生成有效 SQL 语句的代码:module.exports = {  up: (queryInterface, Sequelize) => {    return queryInterface.changeColumn('myTable', 'myColumn', {      type: Sequelize.ENUM('A', 'B', 'C', 'D'),      allowNull: false    });  },  down: (queryInterface, Sequelize) => {    return queryInterface.changeColumn('myTable', 'myColumn', {      type: Sequelize.ENUM('A', 'B', 'C'),      allowNull: false    });  }};这是创建的无效的 SQL     ALTER TABLE [myTable] ALTER COLUMN [myColumn] VARCHAR(255) CHECK ([myColumn] IN(N'A', N'B', N'C', N'D'));代码失败 Incorrect syntax near the keyword 'CHECK'我不确定我还需要在迁移中添加什么才能使其工作,或者在查看文档和相关的 github 问题后,我的方言是否甚至支持这一点。
查看完整描述

1 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

事实证明,MSSQL 并不真正支持ENUM类型。相反,它会创建一个 CHECK 约束并使用该STRING类型。

最好的解决方案是首先删除现有的 CHECK 约束,然后使用新定义重新创建它:https : //docs.microsoft.com/en-us/sql/relational-databases/tables/modify-check-constraints?视图=sql-server-ver15#TsqlProcedure

使用 Sequelize 我对创建的约束一无所知,这使得执行上述解决方案变得困难。所以我决定从 DB 级别移除 ENUM 类型,并将其保留在模型级别


查看完整回答
反对 回复 2021-12-23
  • 1 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信