SQL Server - 如何在数量后重置标识列

时间:2018-01-25 08:54:55

标签: sql-server

我有一张桌子" OrderInfo"有4列:ID,Driver,Date,Increment_ID。

列" Increment_ID"是从1到9999的身份。 专栏" ID"基于列的值" Increment_ID"。(例如:M-ddMMyy-0001)。

就像你可以看到列" ID"," ddMMyy"的格式值是日,月和年。 例如:今天是25/01/2018所以我的专栏的价值" ID"是:M-251218-0001。

如果它的值达到9999,我已经创建了一个重置​​标识列(Increment_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"我为" Increment_ID"选择了最大值。是9999.实际上我每天只有7000行。

我将非常感谢大家的帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

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

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