创建自动代码

时间:2015-12-24 06:56:56

标签: sql sql-server function tsql sql-server-2014

我想创建自动代码示例:

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

结果仍然相同,如果@KODE超出9,则返回到nullSQL SERVER将其读为0,我会得到SQL SERVER

还有另一种方法可以在(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement); 中创建这种代码吗?

1 个答案:

答案 0 :(得分:2)

不需要多个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

警告:

当许多并发调用发生时,您的函数可能会返回重复/创建间隙。

SqlFiddleDemo

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

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