创建自动代码

Create automatic code

我想创建自动代码示例:

B001, B002, B003, B004 .....

我已经为此创建了函数:

CREATE FUNCTION AUTO_CODE()
RETURNS CHAR (4)
AS
BEGIN
    DECLARE @KODE CHAR(4)
    SELECT @KODE = COUNT (KODE_BARANG)FROM BARANG
    IF @KODE>0
    BEGIN
        SELECT @KODE = RIGHT(KODE_BARANG,4) FROM BARANG
        SET @KODE = @KODE+1
    END
    ELSE SET @KODE=1
    RETURN 'B' + LEFT('00',3-LEN(@KODE))+(@KODE)
END

上面的函数仅适用于 B001B010,除此之外它又回到了 B001。它不适用于 B011B012B120

之后我尝试用 if else:

...
DECLARE KODENYA CHAR (5)
IF @KODE >= 0 AND @KODE <=9
    BEGIN
        SET @KODENYA = 'B' + LEFT('00',4-LEN(@KODE))+(@KODE)
    END
    ELSE IF @KODE >= 10 AND @KODE <=99
    BEGIN
        SET @KODENYA = 'B' + LEFT('0',4-LEN(@KODE))+(@KODE)
    END
    ELSE IF @KODE >= 100 AND @KODE <=999
    BEGIN
        SET @KODENYA = 'B' + LEFT('',4-LEN(@KODE))+(@KODE)
    END

    RETURN @KODENYA

结果仍然相同,如果它超出 9,我会以某种方式得到 @KODE,它 return 到 nullSQL SERVER 将其读取为0.

SQL SERVER 中是否有另一种创建此类代码的方法?

不需要多个 if/case 简单 FORMAT:

CREATE TABLE #tab(KODE INT);
INSERT INTO #tab(KODE) VALUES (1),(2),(10),(99),(101),(100),(999);

SELECT FORMAT(KODE, 'B00#')
FROM #tab;

LiveDemo

您可以通过更改格式字符串轻松调整它以获得更长的代码 'B000#'

在你的情况下:

CREATE FUNCTION [dbo].[AUTO_CODE]()
   RETURNS CHAR(4)
AS
BEGIN
    DECLARE @KODE INT = (SELECT COUNT(KODE_BARANG)FROM BARANG);

    RETURN FORMAT(@KODE, 'B00#');
END

警告:

当许多并发调用发生时,您的函数可能 return duplicates/create 间隙。

SqlFiddleDemo


根据您的需要,您可以考虑将计算列添加到您的 BARANG table:

CREATE TABLE BARANG(ID INT IDENTITY(1,1) PRIMARY KEY,
                   col2 VARCHAR(120) NOT NULL,
                   ...
                   KODE AS (FORMAT(ID, 'B00#'))
);