SQL在当前月份更改时生成新的顺序标识符?

时间:2011-08-31 12:56:51

标签: sql vb.net

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

我的问题是我不知道每次更改MONTH时如何将跟踪号重置为001 ..在我的sql代码中,当年份发生变化时,它的工作正在进行...

示例..这是我的跟踪号码。CAB1108031 11表示08年是月份...当我更改月份时,如果月份选择的话,我需要的输出为CAB1109001第一次,如果不是跟踪号码031将保持并加起来结束..谢谢。

1 个答案:

答案 0 :(得分:1)

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

示例(T-)SQL:

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 );