如何在没有特定限制的情况下自动生成数据类型VARCHAR
的变量,这意味着它必须类似于'AB1'
,'AB2'
,'AB3'
......到无穷大
这里主要有两点:
此表中没有标识列
有时候,此列中可能还有其他模式数据,例如'AB1','AB2','AB3','PK1','AB4' Which is (AB(3+1))
答案 0 :(得分:1)
希望它对你有所帮助。
CREATE TABLE #tt(s VARCHAR(100),col1 INT )
INSERT INTO #tt
VALUES('AB1',1),('AB2',100),('AB3',2),('PK1',5),('AB4',20)
GO
DECLARE @prefix VARCHAR(100)='PK'
INSERT INTO #tt(s,col1)
SELECT @prefix+LTRIM(ISNULL(MAX(CASE WHEN ISNUMERIC(v.num)=1 THEN CONVERT(INT,v.num) ELSE 0 END),0)+1),20
FROM #tt
CROSS APPLY(VALUES(SUBSTRING(s,LEN(@prefix)+1,LEN(s)))) v(num)
WHERE LEFT(s,LEN(@prefix))=@prefix
GO 10
SELECT * FROM #tt
s ----- AB1 AB2 AB3 PK1 AB4 PK2 PK3 PK4 PK5 PK6 PK7 PK8 PK9 PK10 PK11 PK12 PK13 PK14 PK15 PK16 PK17 PK18 PK19 PK20 PK21