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将保持并加起来结束..谢谢。
答案 0 :(得分:1)
您需要更改SELECT
和UPDATE
个查询以包含月份。如果该表中没有一个月,您可能还需要添加一个列来存储月份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 );