許多業務系統需要自動產生格式固定的流水編號(如:BH000001、BH000002)。本文提供一個 SQL Server 純量函數範例,自動產生 8 碼編號(前綴 BH + 6 位數字流水號)。
CREATE FUNCTION f_NextBH()
RETURNS CHAR(8)
AS
BEGIN
RETURN (
SELECT 'BH' + RIGHT(1000001 + ISNULL(RIGHT(MAX(BH), 6), 0), 6)
FROM YourTable -- 替換為實際存放編號的資料表
)
END
GO
MAX(BH):取得現有最大編號RIGHT(MAX(BH), 6):擷取後 6 碼數字部分ISNULL(..., 0):若表為空則從 0 開始1000001 + ...:加 1 並補足前導零(利用 1000001 確保 6 位數)RIGHT(..., 6):取最後 6 碼作為新流水號'BH' + ...:加上前綴組成完整編號-- 呼叫函數取得下一個編號
SELECT dbo.f_NextBH() AS NextCode
-- 寫入新資料時直接使用
INSERT INTO YourTable (BH, OtherColumns)
VALUES (dbo.f_NextBH(), '其他資料')
⚠️ 此函數在高併發環境下可能產生重複編號,生產環境建議搭配交易鎖定或使用 SEQUENCE 物件(SQL Server 2012+)。