你可以不喜歡這樣。
首先創建一個序列來生成整數的序列號從1
CREATE SEQUENCE dbo.MySeq AS INT
START WITH 1
INCREMENT BY 1;
開始然後創建,其產生所需的格式的序列碼的存儲過程。
CREATE PROCEDURE dbo.up_GetNextSequence
(
@seq nchar(5) out
)
AS
DECLARE @i int = NEXT VALUE FOR dbo.MySeq;
IF @i > 685323
BEGIN
RAISERROR(N'Sequence is out of range.', 16, 0);
END
IF @i < 10000
BEGIN
SET @seq = N'A' + FORMAT(@i, 'D4');
END
ELSE
BEGIN
DECLARE @j int;
SET @j = @i - 9999;
DECLARE @k int;
SET @k = ((@j - 1) % 999) + 1;
DECLARE @l int;
SET @l = (@j - 1)/999;
DECLARE @m int;
SET @m = (@l % 26) + 65;
DECLARE @n int;
SET @n = (@l/26) + 65;
SET @seq = NCHAR(@n) + NCHAR(@m) + FORMAT(@k, 'D3');
END;
然後測試存儲過程。
DECLARE @seq nchar(5);
EXEC up_GetNextSequence @seq output;
SELECT @seq AS '@seq'
說它四次,我們得到了爲 「A0005」。
爲了測試第一斷點,改變序列對象,以便它返回9999。然後再次執行測試代碼。
ALTER SEQUENCE dbo.MySeq
RESTART WITH 9999;
等等......
ALTER SEQUENCE dbo.MySeq
RESTART WITH 10998;
ALTER SEQUENCE dbo.MySeq
RESTART WITH 35973;
ALTER SEQUENCE dbo.MySeq
RESTART WITH 659349;
測試當它到達允許範圍的末尾時會發生什麼。
ALTER SEQUENCE dbo.MySeq
RESTART WITH 685323;
執行存儲過程一個更多的時間和它產生一個錯誤,稱序列超出範圍。這是設計。
它是你的家庭作品,我們需要做什麼或什麼?你到目前爲止所嘗試過的?發佈 – mohan111