【问题标题】:Auto generate a Varchar Variable自动生成 Varchar 变量
【发布时间】:2017-01-05 04:30:48
【问题描述】:

如何在没有特定限制的情况下自动生成数据类型为VARCHAR的变量,这意味着它必须像'AB1'、'AB2'、'AB3'...直到无穷大

这里主要有两点:

  1. 此表中没有标识列

  2. 有时它可能在此列中有另一个模式数据,例如'AB1','AB2','AB3','PK1','AB4' Which is (AB(3+1))

【问题讨论】:

  • 您希望在创建表语句中发生这种情况,还是希望在选择查询中发生这种情况?
  • 模式将是相似的,或者我们可以期待像“ABC123”这样的记录吗?
  • 所以无穷大是个问题。 SQL Server 中的 varchar(max) 字段可以容纳 2^31-3 个字符 - 几乎不足以支持无穷大!见:stackoverflow.com/questions/1761124/…

标签: sql sql-server sql-server-2008


【解决方案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

【讨论】:

  • 在'Pk10'之后它一次又一次地得到'Pk10'@Nolan Shang
  • 这个错误是因为MAX的值是字符串而不是数字,所以9会大于10,所以需要将值转换为整数才能得到最大值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 2021-05-14
相关资源
最近更新 更多