猿问

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

我正在尝试使用 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 问题后,我的方言是否甚至支持这一点。


萧十郎
浏览 199回答 1
1回答

海绵宝宝撒

事实证明,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 类型,并将其保留在模型级别
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答