从SQL Server插入时的ID计算出的列的值

时间:2018-07-26 11:04:07

标签: sql-server sequelize.js

我在SQL Server 2012中有一个表,

CREATE TABLE [dev].[File] 
(
    id BIGINT IDENTITY(1,1) NOT NULL,
    fileUrl VARCHAR(1024) NOT NULL
    PRIMARY KEY (id)
);

fileUrl 的值需要基于前缀和 id 字段的值进行计算。即

fileUrl = <file_directory>/<id>.<file_extension> // id needs to be computed when created
// e.g. http://example.com/<id>.xlsx

因此,使用sequelize.js时,它必须类似于

const filePath = 'http://example.com'
const fileExtension = '.xlsx'
File.create({
 fileUrl: // What goes here?
})

一种方法是使用空的fileUrl创建行,然后根据ID查找并更新。

有没有更简单的方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

如果您想作为PK身份,则必须按照您的描述进行操作(或按照@maulik kansara的评论)。在创建标识列之前我们曾经做过的事情是:

创建一个表,例如具有一列的NextValue NextKey bigint不为null。伪代码:

read nextKey into localvalue

update NextLalue set NextKey = NextKey + 1 where NextKey = localvalue

if row was updated continue else go back to start


use localvalue as [dev].file.id.

对此有多种变体,但这就是它的核心。