我有这张桌子“ ART”:
COD - varchar(20) PK
DES - varchar(50)
简单的示例数据是:
COD DES
MM000000 AA
MM000001 BB
MM000010 CC
MM000145 DD
如何在每次插入时将COD列增加1?最终的pk格式必须为:“ MM” + 6位数字
答案 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)
您还将在同一参考文档中找到函数源代码