标识列格式

时间:2015-08-12 19:00:26

标签: sql sql-server-2012

我正在将一些数据转换为SQL,一列是今年最后2位数字格式的ID列,并且是数据库中最后输入行的增量+1。

所以今年第一次参赛将是15-001,下一次参赛将是15-002等。我似乎无法在网上找到一个如何做到这一点的例子?我不确定我是否可以在Computed Column中执行此操作?使用Sql Server 2012。

谢谢!

1 个答案:

答案 0 :(得分:0)

我强烈建议您不要使用您所声明的格式的ID。你会遇到很多其他问题。您可以在存储过程或函数中使用此代码来获取下一个ID值。

DECLARE 
  @oldID varchar(8),
  @newID varchar(8),
  @temp varchar(8),
  @number decimal,
  @day int;
begin
  SET @oldID = '15-555'; --select statement for last id
  SET @day = YEAR(CURRENT_TIMESTAMP);
  IF ( LEN(@oldID) = 6)
    SET @temp = SUBSTRING(@oldID, 4, 6);
  ELSE
    SET @temp = SUBSTRING(@oldID, 3, 5);
  SET @number = CAST(@temp AS Decimal(10, 0));
  SET @number += 1;
  SET @temp = CAST(@number AS varchar(8));
  WHILE LEN(@temp) < 3
  begin
    SET @temp = '0' + @temp;
    end
  SET @newID = SUBSTRING(CAST(@day AS varchar(8)), 3, 4) + '-' + @temp;

  print @newID --ID that you are looking for.
end

在15-999之后停止正常工作,如果这是您要求的,则不会重置为16-001。可以更改代码以解释这些问题。