在 SQL Server 中的一段时间结束后重置序列号

Posted

技术标签:

【中文标题】在 SQL Server 中的一段时间结束后重置序列号【英文标题】:Reset serial number after end of a period in SQL Server 【发布时间】:2019-03-15 13:52:59 【问题描述】:

我正在尝试实现我在下面提到的逻辑。

财政年度从 4 月 1 日开始,到 3 月 31 日结束(明年)。在此期间,我想连续增加一个数字。但是当下一个财政年度到来时,序列号将被重置。假设如果 2019 年 3 月 31 日最后一个序列号是 PA9999,那么在 2019 年 4 月 1 日,序列号将从 PA0001 开始,依此类推。同样在 2020 年 4 月 1 日,第一个序列号将是 PA0001。这将在添加过程中发生,因此旧记录不会发生任何更改。我正在使用SQL来解决它。

实现它的最佳方法是什么?

谢谢

帕萨

【问题讨论】:

到时候使用SEQUENCE 和reset it。您可以使用多个序列并根据年份选择正确的序列 我不认为序列会起作用。序列号的一部分是静态的。我认为有一种手动方式。 将作业设置为在 4 月 1 日午夜运行以重置序列。 @Partha 在 所有 混合文本和数字的情况下,有一个函数可以将数字序列转换为混合字符串。您不能增加文本。假设PA 没有改变,一个简单的SELECT 'PA' + NEXT VALUE FOR SomeSequence 就可以了 重置意味着在添加过程中新的序列号有新的记录。我不会更改旧记录。 【参考方案1】:

试试这个:

DECLARE @tblFY TABLE
(
    Id INT,
    FinancialYear VARCHAR(100),
    StartDate DATETIME,
    EndDate DATETIME
)

INSERT INTO @tblFY(Id, FinancialYear, StartDate, EndDate)
VALUES(1,'FY - 2010','01-Apr-2010','31-Mar2011')

DECLARE @tblsales TABLE
(
    Id INT,
    FinancialYearId int,
    SerialNumber VARCHAR(10)
)

DECLARE @yourFinancialYearId INT
SET @yourFinancialYearId = 1

INSERT INTO @tblsales(Id, FinancialYearId, SerialNumber)
VALUES(1, 1   ,'PA0001'  )

SELECT NextSerialNumber = 'PA' + RIGHT('0000'+ CAST( (ISNULL(MAX(CONVERT(INT,REPLACE(SerialNumber,'PA',''))),0) + 1) AS VARCHAR(10)),4) FROM @tblsales WHERE FinancialYearId = @yourFinancialYearId

【讨论】:

以上是关于在 SQL Server 中的一段时间结束后重置序列号的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008 视图正在丢失默认值

sql server 删除大量数据的一次坑爹之旅

Sql Server 中的 @@ERROR

sql server 中两个日期之间的年份以及每个日期在 sql server 中的开始和结束日期

如何更改sql server中的默认列值

如何对 SQL Server 报表生成器矩阵降序排序?