我正在使用sequelize-typescript,它隐式地将主键列添加到所有创建查询中,这是一个问题,因为我不想自己设置此ID(IDENTITY_INSERT设置为OFF)。
@Table({
timestamps: false,
})
class Table extends Model<Table> {
@PrimaryKey
@Column
MyId: string;
@Column
column: string;
}
table.create({column: 'value'});
这以查询结尾:
sql: 'INSERT INTO [Table] ([MyId],[column]) OUTPUT INSERTED.* VALUES (NULL,'value');'
错误:
SequelizeDatabaseError: DEFAULT or NULL are not allowed as explicit identity values.
我需要获取的查询是:
INSERT INTO [Table] ([column]) OUTPUT INSERTED.* VALUES ('value');
非常感谢您的帮助!
答案 0 :(得分:0)
首先-删除@PrimaryKey装饰器。 在将模型添加到序列实例后,请执行以下操作:
Table.removeAttribute('id');
现在不会将ID添加到查询中,而是将其用于选择方法中的排序,因此您可以通过以下方式设置自己的订单:
Table.findAll({where: {column: 'value'}, order: ['MyId']});
当然,使用此方法意味着您的数据库知道哪一列是主键,并自行对其进行递增。