我想创建自动代码示例:
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
结果仍然相同,如果@KODE
超出9
,则返回到null
并SQL SERVER
将其读为0
,我会得到SQL SERVER
。
还有另一种方法可以在(function(html){html.className =
html.className.replace(/\bno-js\b/,'js')})(document.documentElement);
中创建这种代码吗?
答案 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#'))
);