SQL在当前月份发生变化时生成新的顺序标识符


ALTER PROCEDURE [dbo].[generateTrackNo] AS
   DECLARE @tempYear VARCHAR(5),@tempMonth VARCHAR(5)
   SET @tempYear = Year(GetDate())
   SET @tempMonth = Month(GetDate())
   SELECT 'CAB' + SUBSTRING(CONVERT(VARCHAR(8), GETDATE(), 112), 3, 4) + 
          RIGHT('0000000'+ CAST(CurrentNo AS VARCHAR(10)), 5) 
   FROM tblTrackNo 
   WHERE GenYear = @tempYear
   UPDATE tblTrackNo 
   SET CurrentNo = CurrentNo + 1 
   WHERE GenYear = @tempYear

我这里的问题是我不知道如何重置跟踪号码为001每次我改变月份。在我的SQL代码工作时,年的变化…

例子. .这是我的快递单号。CAB1108031 11代表08年,代表月份。当我更改月份时,我需要的输出是CAB1109001,如果月份是第一次选择,如果不是,跟踪号031将保留并加到最后。谢谢。

您需要更改SELECTUPDATE查询以包含月份。如果表tblTrackNo中没有月份,您可能还需要添加一个列来存储月份。

示例SQL (T):

SELECT  'CAB' + SUBSTRING(CONVERT(VARCHAR(8), GETDATE(), 112), 3, 4) + 
        RIGHT('0000000'+ CAST(CurrentNo AS VARCHAR(10)), 5) 
FROM tblTrackNo 
WHERE   GenYear = @tempYear
        AND GenMonth = @tempMonth
UPDATE tblTrackNo 
SET CurrentNo = CurrentNo + 1 
WHERE   GenYear = @tempYear
        AND GenMonth = @tempMonth

按此方式,您仅基于当前年份有效地生成跟踪号。

您可能还需要向表tblTrackNo添加数据,以至少初始化每个年份和编号的跟踪号。或者您可以像下面这样使用(T-)SQL:

SELECT  'CAB' + SUBSTRING(CONVERT(VARCHAR(8), GETDATE(), 112), 3, 4) + 
        RIGHT('0000000'+ CAST(ISNULL(CurrentNo, 1) AS VARCHAR(10)), 5) 
FROM tblTrackNo
WHERE   GenYear = @tempYear
        AND GenMonth = @tempMonth
IF EXISTS (
    SELECT *
    FROM tblTrackNo
    WHERE   GenYear = @tempYear
            AND GenMonth = @tempMonth )
    UPDATE tblTrackNo 
    SET CurrentNo = CurrentNo + 1 
    WHERE   GenYear = @tempYear
            AND GenMonth = @tempMonth
ELSE
    INSERT tblTrackNo ( GenYear, GenMonth, CurrentNo )
    VALUES ( @tempYear, @tempMonth, 2 );

相关内容

  • 没有找到相关文章

最新更新