1

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

我绑写这个:

Blockquote ALTER PROCEDURE [dbo].[spACC_SELECT_VOUCHER_NUMBER]

 @COMPANY_ID uniqueidentifier,
 @VOUCHER_TYPE INT

开始

DECLARE @IS_AUTOMETIC BIT =(从 ACC_VOUCHER_CONFIG 中选择 VOUCHER_CONFIG_NUMBERING_METHOD,其中 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    

结尾

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

谢谢纳希德
_

4

2 回答 2

4

对于您遇到的六位数,添加前导零,如下所示:

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

Num你的序号在哪里。

这会在前面加上 5 个零,然后从结果字符串中取出正确的 6 个字符。

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

于 2012-05-06T18:13:24.547 回答
1

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

于 2012-05-06T22:18:48.097 回答