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将保留并加到最后。谢谢。
您需要更改SELECT
和UPDATE
查询以包含月份。如果表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 );