创建具有复合主键的 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
(即身份)创建表。添加另一列存储 YYYYMM
的 YearMonth 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
更新新的 INT
列 monthlyID
。
关于sql - 每月自动递增主键并重新播种,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29893070/