创建自动代码
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
上面的函数仅适用于 B001
到 B010
,除此之外它又回到了 B001
。它不适用于 B011
、B012
或 B120
。
之后我尝试用 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 到 null
和 SQL 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;
您可以通过更改格式字符串轻松调整它以获得更长的代码 '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 间隙。
根据您的需要,您可以考虑将计算列添加到您的 BARANG
table:
CREATE TABLE BARANG(ID INT IDENTITY(1,1) PRIMARY KEY,
col2 VARCHAR(120) NOT NULL,
...
KODE AS (FORMAT(ID, 'B00#'))
);
我想创建自动代码示例:
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
上面的函数仅适用于 B001
到 B010
,除此之外它又回到了 B001
。它不适用于 B011
、B012
或 B120
。
之后我尝试用 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 到 null
和 SQL 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;
您可以通过更改格式字符串轻松调整它以获得更长的代码 '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 间隙。
根据您的需要,您可以考虑将计算列添加到您的 BARANG
table:
CREATE TABLE BARANG(ID INT IDENTITY(1,1) PRIMARY KEY,
col2 VARCHAR(120) NOT NULL,
...
KODE AS (FORMAT(ID, 'B00#'))
);