如何在以下范围内生成唯一的收据编号: GA00000-GZ99999?我不允许使用'I‘和'O’字母,因此GI00000-GI99999和GO00000-GO99999将被排除。
理想情况下,我希望用T-SQL创建它,但也可以用VB.Net创建它。这个数字将存储在SQL中,我可以在生成下一个数字之前访问它。它们不一定是连续的。
谢谢。
发布于 2009-12-22 03:52:24
我决定这样做:
CREATE FUNCTION [dbo].[fn_generateReceiptNumber]()
RETURNS NCHAR(7)
AS
BEGIN
-- Declare the return variable here
DECLARE @result NCHAR(7);
DECLARE @prefix NCHAR(1);
DECLARE @suffix INT;
DECLARE @currentMax NCHAR(7);
SELECT @currentMax = MAX(ISNULL(fp.CustomReceiptNo, 'GA00001')) FROM dbo.FinPayment fp;
SELECT @prefix = SUBSTRING(@currentMax,2,1);
SELECT @suffix = CAST(SUBSTRING(@currentMax,3,7) AS INT);
IF((@suffix + 1) > 99999)
BEGIN
SELECT @suffix = 0;
END
ELSE
BEGIN
SELECT @suffix = @suffix + 1;
END
IF(@suffix = 0)
BEGIN
IF(@prefix = 'Z')
BEGIN
RETURN -1;
END
ELSE
BEGIN
IF(NCHAR(UNICODE(@prefix)+1) IN ('I', 'O'))
BEGIN
SELECT @prefix = NCHAR(UNICODE(@prefix)+2);
END
ELSE
BEGIN
SELECT @prefix = NCHAR(UNICODE(@prefix)+1);
END
END
END
-- Return the result of the function
SELECT @result = NCHAR(71) + @prefix + CAST(RIGHT('00000' + RTRIM(@suffix), 5) AS NCHAR(5));
RETURN @result;
END
GO感谢大家的投入。史蒂夫。
发布于 2009-12-22 02:59:37
创建允许作为第一个数字的所有字符的array。
对于任何数字收据id n,收据代码将是G + array[n/1000000] + n % 1000000。
发布于 2009-12-22 02:56:18
保留一个后缀指针。当索引折回超过99999时,递增它。检查你的特殊情况和疲惫(例如Z)。
https://stackoverflow.com/questions/1941886
复制相似问题