sql - 每月自动递增主键并重新播种

标签 sql sql-server identity

创建具有复合主键的 SQL 表的最佳解决方案是什么。

  • 主键的第一列是 ID {int}。
  • 主键的第二列是 YearMonth {string,如 yyyyMM ex。 201409 } 这是当前月份。

每个月可以将 ID 重新播种到 1

我实际上需要运行ID,例如

"201409-00001"  
"201409-00002"   
"201409-00003"  
.  
.  
"201410-00001"   
"201410-00002"   
.  
.   
"201411-00001"      

最佳答案

根据问题和您的评论,您似乎需要以 201411-00001 格式显示行标识符。这不需要是您的实际主键。我建议你做这样的事情。

使用ID(即身份)创建表。添加另一列存储 YYYYMMYearMonth CHAR(6) 列,或者如果您已有一列将日期存储为 date/datetime,请使用那。在你的SELECTs中你会做这样的事情

LEFT(CONVERT(VARCHAR(10),YearMonth,112),6) + '-' + RIGHT(REPLICATE('0',5) + CONVERT(VARCHAR(5),ROW_NUMBER() OVER(PARTITION BY DateCol, ORDER BY ID),5)

您还可以有一个触发器,根据月份的 MAX(monthlyID) + 1 更新新的 INTmonthlyID

关于sql - 每月自动递增主键并重新播种,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29893070/

相关文章:

sql - 为每个请求创建到 MS SQL 数据库的新 RJDBC 连接是否存在性能/其他缺点?

mysql - 通过映射表一对多连接查询

sql - TSQL如何给组分配编号

sql-server - 在 SSIS 中生成唯一标识符 GUID

arrays - 数组标识 - 是

sql - 在查询中仅使用一列时多列 MySQL 索引的性能

c# - 使用 LINQ 创建 JSON

sql - 在 SQL 中无约束地向表添加新列

.net - 是否可以在 Azure ACS 中配置规则,以便我可以将声明值与通配符/正则表达式进行匹配?

oauth-2.0 - Identity Server 身份验证响应对象中属性 "expires_at"的使用