注意:自动递增SQL表中的值

时间:2015-07-16 11:20:23

标签: sql sql-server auto-increment

我在名为it(EmployeeDetailKey - varchar(10))的字段中获得了一个值,其中包含连续值,例如

  

00001,00002,00003 ....

它位于Employeedetail表中。当必须插入新的Employee细节时,我必须获得max(EmployeeDetailKey)并递增1并将其存储回来。如果我有10个需要插入的员工记录,那么必须遵循相同的程序。

  

如果max(EmployeeDetailKey)= 00003则插入10条记录后   它必须是00013.稍后插入后让我们说100条记录   是00113。

如何以MS-SQL语句的形式完成。

请注意,该列不能是标识类型。

3 个答案:

答案 0 :(得分:4)

只需在表格中添加标识列即可。我会建议像:

IntEmployeeDetailKey int not null identity(1, 1) primary key,
. . .

然后添加一个计算列:

EmployeeDetailKey as (right(('00000' + cast(IntEmployeeDetailKey as varchar(10)), 5)

然后SQL Server将自动执行递增。你可以将值作为零填充字符串输出。

答案 1 :(得分:1)

如果您更喜欢不改变表结构的解决方案,那么:

  1. 将零填充字符串值转换为int。这在SQl服务器中很容易,因为它可以轻松地将这些字符串转换为数字:

    MAX()

    这将返回整数值3。

  2. 查找MAX()

    只需在您刚转换为字符串的列上执行SELECT MAX(CAST(mycolumn AS int)) FROM mytable,例如......

    SELECT MAX(CAST(mycolumn AS int)) + 1 FROM mytable

    实际上,您不必进行转换,因为SQL服务器会在原始字符串表示中正确排序值。

  3. 增量

    这很简单,因为你现在有了整数值,所以......

    SELECT FORMAT(MAX(CAST(mycolumn AS int)) + 1, '00000') FROM mytable

  4. 将其转换回零填充字符串

    SQL Server 2008在这里驯服有点棘手,因为左边填充不是他的专长。但是,从SQL Server 2012开始,有一个FORMAT函数可用,因此,您可以使用...

    REPLICATE()

    如果您只有SQL Server 2005或2008,则可以使用LEN()结合SELECT REPLICATE('0', 5 - LEN(MAX(CAST(mycolumn AS int)) + 1)) + CAST((MAX(CAST(mycolumn AS int)) + 1) AS nvarchar(5)) FROM mytable来获取所需内容(免责声明:UGLY CODE):

    SELECT RIGHT('00000' + CAST(MAX(CAST(mycolumn AS int) + 1) as nvarchar(5)), 5) FROM mytable

    编辑正如Luaan暗示的那样,您可以使用另一个填充选项(更短且更易读的代码):

    public function register() { $this->app->singleton('neoclient', function ($app) { return ClientBuilder::create() ->addConnection('default', 'http', env('NEO4J_HOST'), intval(env('NEO4J_PORT')), true, env('NEO4J_USER'), env('NEO4J_PASSWORD')) ->setDefaultTimeout( intval(env('NEO4J_TIMEOUT')) ) ->setAutoFormatResponse(true) ->build(); }); }

答案 2 :(得分:0)

我不知道EmployeeDetailKey是否必须具有此格式。

我建议您将varchar(10)的数据类型替换为IDENTITY

IDENTITY是一种特殊的数据类型,每次在父表中插入行时,SQL Server都会自动递增。您可以在此处了解详情:https://msdn.microsoft.com/en-us/library/ms186775.aspx

如果您需要使用前导零来呈现它,您可以随时选择它(从这里自由改编:Most efficient T-SQL way to pad a varchar on the left to a certain length?):

SELECT right('00000'+ rtrim(EmployeeDetailKey), 5) FROM YourTable