如何使用前缀,数字编号和后缀生成ID?

时间:2012-05-06 18:07:31

标签: sql sql-server sql-server-2008

我想在MSSQL Server 2008中生成一个ID。它将是Prefix + Numeric Number +后缀,如'PV#000001#SV'。这将是用户定义的(取决于配置)前缀,数字长度,后缀和起始编号。每次都会增加数字编号。

我打算写下这个:

  

块引用   更改程序[dbo]。[spACC_SELECT_VOUCHER_NUMBER]

 @COMPANY_ID uniqueidentifier,
 @VOUCHER_TYPE INT
     

AS BEGIN

     

DECLARE @IS_AUTOMETIC BIT =(SELECT VOUCHER_CONFIG_NUMBERING_METHOD   从ACC_VOUCHER_CONFIG WHERE   ACC_VOUCHER_CONFIG.VOUCHER_CONFIG_VALUE=@VOUCHER_TYPE)

IF(@IS_AUTOMETIC=1)
    BEGIN
        SELECT CASE WHEN SUBSTRING(V.VOUCHER_CODE, 7, 23) IS NULL  
                    THEN CASE WHEN VC.VOUCHER_CONFIG_PREFIX IS NULL THEN '' ELSE VC.VOUCHER_CONFIG_PREFIX END + 
                            RIGHT ('0000000000000'+ CAST( VC.VOUCHER_CONFIG_BEGINING_NUMBER AS VARCHAR), VC.VOUCHER_CONFIG_NUMERIC_WIDTH) + 
                            CASE WHEN VC.VOUCHER_CONFIG_SUFFIX IS NULL THEN '' ELSE VC.VOUCHER_CONFIG_SUFFIX END
                    ELSE CASE WHEN VC.VOUCHER_CONFIG_PREFIX IS NULL THEN '' ELSE VC.VOUCHER_CONFIG_PREFIX END + 
                            RIGHT ('0000000000000'+ CAST((CAST( SUBSTRING(V.VOUCHER_CODE, 7, 23) AS INT)+1) AS VARCHAR), VC.VOUCHER_CONFIG_NUMERIC_WIDTH) +  
                            CASE WHEN VC.VOUCHER_CONFIG_SUFFIX IS NULL THEN '' ELSE VC.VOUCHER_CONFIG_SUFFIX END
                    END AS VOUCHER_CODE FROM  ACC_VOUCHER_CONFIG VC
                    LEFT OUTER JOIN  ACC_VOUCHER V ON  VC.VOUCHER_CONFIG_VALUE =  V.VOUCHER_TYPE                        
                    WHERE  VC.COMPANY_ID=@COMPANY_ID AND VC.VOUCHER_CONFIG_VALUE=@VOUCHER_TYPE      
END    
     

END

当我更改数字长度/后缀时,它不起作用。

感谢
Nahid

2 个答案:

答案 0 :(得分:4)

对于你正在努力的六位数字,添加这样的前导零:

SELECT RIGHT('00000'+ CONVERT(VARCHAR,Num),6) AS NUM FROM your_table

Num是您的序号。

这会预先设置5个零,然后从结果字符串中取出正确的6个字符。

更详细的自定义ID生成说明如下:

答案 1 :(得分:1)

我的建议是在数据库中存储一个数字(即int),并使用更适合它的工具(即具有sprintf或等效字符串格式的编程语言)格式化ID客户端。