Sql server SQL Server-如何在数字量之后重置标识列

Sql server SQL Server-如何在数字量之后重置标识列,sql-server,Sql Server,我有一个表OrderInfo,它有4列:ID、Driver、Date、Increment\u ID 列增量_ID是从1到9999的标识。 基于列增量值的列ID_ID.Ex:M-ddMMyy-0001 就像您可以看到列ID的格式值一样,ddMMyy是day、month和year。 例如:今天是2018年1月25日,所以我的列ID的值是:M-251218-0001 我已经创建了一个触发器,在其值达到9999时重置标识列增量ID。但出了问题,我无法插入新行,除非我扣下扳机。这是我的扳机: CREATE

我有一个表OrderInfo,它有4列:ID、Driver、Date、Increment\u ID

列增量_ID是从1到9999的标识。 基于列增量值的列ID_ID.Ex:M-ddMMyy-0001

就像您可以看到列ID的格式值一样,ddMMyy是day、month和year。 例如:今天是2018年1月25日,所以我的列ID的值是:M-251218-0001

我已经创建了一个触发器,在其值达到9999时重置标识列增量ID。但出了问题,我无法插入新行,除非我扣下扳机。这是我的扳机:

CREATE TRIGGER trg_OrderInfo_ResetIdentityColumn ON OrderInfo
FOR INSERT
AS
BEGIN
    DECLARE @max_increment_ID int = (SELECT MAX(od.Increment_ID) FROM OrderInfo od inner join inserted i on i.Increment_ID = od.Increment_ID )
    IF(@max_increment_ID is not null and @max_increment_ID=9999)
      DBCC CHECKIDENT ('OrderInfo',RESEED,0)
END
为了确保防止主键ID重复,我选择了增量ID的最大值为9999。事实上,我一天只有大约7000排


我将感谢所有人的帮助。谢谢大家!

如果您只需要确保ID是唯一的,可以使用[data]作为一个条件

if Not Exist(select 1 FROM OrderInfo where [date]=getdate())
    DBCC CHECKIDENT ('OrderInfo',RESEED,0)

一旦达到最大值,除非从表中删除行,否则MAXIncrement\u ID将始终找到该最大值并执行另一次重新设定种子的尝试。不过,我通常会建议您,如果您关心标识列的数值,那么您可能使用了错误的工具。谢谢您的帮助。因此,如果我达到最大值9999,我将编写一条delete语句,然后我将重置我的标识列?我错了吗?@MitchWheat你能给我举个例子吗?如果你想让数值从1循环到9999,请使用一个。如果必须每天重置,请使用具有ALTER SEQUENCE的计划作业。。重新启动。@Jeroenmoster:谢谢您提供的信息。安排工作是我的一个解决方案。但我只是想用存储过程或触发器来解决我的问题。您的解决方案是使用SQL Server解决大型项目的最佳方法。谢谢您的解决方案。我保留了条件if和变量@max_increment_ID,并使用CONVERT关键字转换表中的日期列,并与当前日期进行比较。如果没有行匹配,我将删除表中的所有行,并将identity设置为0。