SQL Server以1个主键varchar递增

时间:2018-07-27 09:35:26

标签: sql sql-server primary-key sql-insert

我有这张桌子“ ART”:

COD - varchar(20) PK
DES - varchar(50)

简单的示例数据是:

COD       DES
MM000000  AA
MM000001  BB
MM000010  CC
MM000145  DD

如何在每次插入时将COD列增加1?最终的pk格式必须为:“ MM” + 6位数字

2 个答案:

答案 0 :(得分:1)

DECLARE @a INT = 0;
WHILE @a < 100 
BEGIN
    SELECT 'MM' + RIGHT('000000' + CAST(@A as VARCHAR(6)),6)
    SET @a += 1
END


CREATE TABLE #a 
(
    Id  INT IDENTITY(1,1),
    Code    AS 'MM' + RIGHT('000000' + CAST(Id as VARCHAR(255)),6)
)

INSERT INTO #a DEFAULT VALUES
INSERT INTO #a DEFAULT VALUES
INSERT INTO #a DEFAULT VALUES

SELECt * FROM #a

但是身份可能是一个不均衡增长的价值

答案 1 :(得分:0)

我想在表定义中将标识列定义为计算列会更好,更安全

请参阅Custom Sequence String as SQL Identity Column上的SQL教程

该解决方案要求整数数据类型的简单标识列随每次插入而增加1 然后第二列,实际上是按如下方式创建的计算列,将帮助您解决所需的问题

COD as dbo.udf_ZeroPaddingAndConcat('ID-', CAST(Id as nvarchar(10)),6,'0'),

实际上,自定义功能模块只是在这里进行零填充,

SELECT @Prefix + RIGHT(REPLICATE(@PaddingChar, @Length) + CAST(@Id as nvarchar(10)), @Length)

您还将在同一参考文档中找到函数源代码