資料表 SYS_Company 欄位 CompanyId 需自動生成格式:CY00000001(前綴 CY + 8 位流水號)。
CREATE FUNCTION [dbo].[f_PrimaryCode_SYS_Company]()
RETURNS CHAR(10)
AS
BEGIN
RETURN (
SELECT 'CY' + RIGHT(100000001 + ISNULL(RIGHT(MAX(CompanyId), 8), 0), 8)
FROM SYS_Company WITH (XLOCK, PAGLOCK)
);
END
ALTER TABLE [dbo].[SYS_Company] ADD CONSTRAINT DF_SYS_Company_CompanyId DEFAULT ([dbo].[f_PrimaryCode_SYS_Company]()) FOR [CompanyId];
ALTER TABLE SYS_Company DROP CONSTRAINT DF_SYS_Company_CompanyId;

WITH (XLOCK, PAGLOCK):並發環境下防止重複鍵值RIGHT(MAX(CompanyId), 8):提取現有最大流水號100000001 + ...:確保補零至 8 位RIGHT(..., 8):取右 8 位CREATE FUNCTION dbo.GenPrefixSeq(@Prefix VARCHAR(10), @Table VARCHAR(100), @Col VARCHAR(100), @Len INT)
RETURNS VARCHAR(50)
AS BEGIN
DECLARE @MaxSeq VARCHAR(50);
SELECT @MaxSeq = MAX(CASE WHEN @Col LIKE @Prefix + '%' THEN SUBSTRING(@Col, LEN(@Prefix)+1, @Len) END) FROM @Table;
RETURN @Prefix + RIGHT(POWER(10, @Len) + ISNULL(CAST(@MaxSeq AS INT), 0) + 1, @Len);
END
SEQUENCE (SQL 2012+) + 觸發器/預設值XLOCK, PAGLOCK 可能影響並發效能,評估業務量級透過標量函數 + 預設約束實現自定義格式自增,適合中低併發、格式固定的業務場景。高併發推薦 SEQUENCE 方案。