Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在MS SQL下使用关联进行迁移时出现的问题_Sql Server_Sequelize.js_Sequelize Cli - Fatal编程技术网

Sql server 在MS SQL下使用关联进行迁移时出现的问题

Sql server 在MS SQL下使用关联进行迁移时出现的问题,sql-server,sequelize.js,sequelize-cli,Sql Server,Sequelize.js,Sequelize Cli,在MS SQL下运行时出现问题:sequelize db:migrate。 我有一个联系人型号,属于其他两个型号。因此,我将其添加到contact.associate=function(models)函数中: contact.belongsTo(models.job) contact.belongsTo(models.customer) 联系人模型的迁移如下所示: id: { allowNull: false, autoIncrement: true, primary

在MS SQL下运行时出现问题:
sequelize db:migrate
。 我有一个
联系人
型号,属于其他两个型号。因此,我将其添加到
contact.associate=function(models)
函数中:

contact.belongsTo(models.job)
contact.belongsTo(models.customer)
联系人模型的迁移如下所示:

 id: {
    allowNull: false,
    autoIncrement: true,
    primaryKey: true,
    type: Sequelize.INTEGER
  },
...
jobId: {
    type: Sequelize.INTEGER,
    references: {
      model: "jobs",
      key: "id"
    }
  },
customerId: {
    type: Sequelize.INTEGER,
    references: {
      model: "customers",
      key: "id"
    }
  },
我试图与
联系人
模型关联的模型命名为:
作业
客户
,它们的表:
作业
客户

使用
--debug
标志运行时出现的错误:

== 20181201143147-create-productionstep: migrating =======
ERROR: SequelizeDatabaseError: Could not create constraint or index. See         
previous errors.
at Query.formatError (C:\Users\Jan\Documents\navigatemNode\node_modules\sequelize\lib\dialects\mssql\query.js:315:12)
at Request.connection.lib.Request [as userCallback] (C:\Users\Jan\Documents\navigatemNode\node_modules\sequelize\lib\dialects\mssql\query.js:107:25)
at Request._this.callback (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\request.js:60:27)
at Connection.endOfMessageMarkerReceived (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\connection.js:1922:20)
at Connection.dispatchEvent (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\connection.js:1004:38)
at Parser.<anonymous> (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\connection.js:805:18)
at emitOne (events.js:116:13)
at Parser.emit (events.js:211:7)
at Parser.<anonymous> (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\token\token-stream-parser.js:54:15)
at emitOne (events.js:116:13)
at Parser.emit (events.js:211:7)
at addChunk (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_readable.js:291:12)
at readableAddChunk (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_readable.js:278:11)
at Parser.Readable.push (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_readable.js:245:10)
at Parser.Transform.push (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_transform.js:148:32)
at Parser.afterTransform (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_transform.js:91:10)
at Parser._transform (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\token\stream-parser.js:69:9)
at Parser.Transform._read (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_transform.js:184:10)
at Parser.Transform._write (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_transform.js:172:83)
at doWrite (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_writable.js:428:64)
at writeOrBuffer (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_writable.js:417:5)
at Parser.Writable.write (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_writable.js:334:11)
at Parser.addEndOfMessageMarker (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\token\token-stream-parser.js:80:26)
at Connection.message (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\connection.js:1913:32)
at Connection.dispatchEvent (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\connection.js:1004:38)
at MessageIO.<anonymous> (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\connection.js:884:18)
at emitNone (events.js:106:13)
at MessageIO.emit (events.js:208:7)
没有记录以前的错误

我已经检查了
客户
作业
表的主键是否命名为
id
,并且这些表是从1月开始在数据库中创建的

编辑:我已经注释掉了
jobId
customerId
对象,然后它迁移,一旦撤消,我尝试只添加一个,但再次失败,出现相同的错误

好的, 通过为外键创建单独的迁移,我成功地解决了这个问题:

  up: (queryInterface, Sequelize) => {
return queryInterface.addColumn(
  'contacts',
  'jobId',
  {
    type: Sequelize.INTEGER,
    references: {
      model: "jobs",
      key: "id"
    },
    onDelete: 'SET NULL'
  },
)
  .then(() => {
    return queryInterface.addColumn(
      'contacts',
      'customerId',
      {
        type: Sequelize.INTEGER,
        references: {
          model: "customers",
          key: "id"
        },
        onDelete: 'SET NULL'
      }
    )
  })
},

down: (queryInterface, Sequelize) => {
return queryInterface.removeColumn(
  'contacts',
  'jobId',
)
  .then(() => {
    return queryInterface.removeColumn(
      'contacts',
      'customerId',
    )
  })
}

删除ms sql中的sequelize元文件并重新运行迁移

  up: (queryInterface, Sequelize) => {
return queryInterface.addColumn(
  'contacts',
  'jobId',
  {
    type: Sequelize.INTEGER,
    references: {
      model: "jobs",
      key: "id"
    },
    onDelete: 'SET NULL'
  },
)
  .then(() => {
    return queryInterface.addColumn(
      'contacts',
      'customerId',
      {
        type: Sequelize.INTEGER,
        references: {
          model: "customers",
          key: "id"
        },
        onDelete: 'SET NULL'
      }
    )
  })
},

down: (queryInterface, Sequelize) => {
return queryInterface.removeColumn(
  'contacts',
  'jobId',
)
  .then(() => {
    return queryInterface.removeColumn(
      'contacts',
      'customerId',
    )
  })
}