【发布时间】:2022-11-23 02:36:05
【问题描述】:
我有一个包含索引的 varchar 列的表。此列中的值由一个前缀和一个递增的数字值组成。值没有必要按顺序排列。
ABC00010
ABC00011
ABC00015
ABC00012
ABC00017
ABC00016
and so on...
序列中可能存在缺失值。如何找到可用于插入的最小数字?
我写了这个并且它有效。但是当数字以千为单位时,需要几秒钟的时间。
Declare @C int = 1;
While Exists(Select 1 From MyTable Where Col='ABC'+Format(@C,'00000')) Set @C=@C+1;
Select 'Next Number: ABC'+Format(@C,'00000');
有没有更快的方法?
【问题讨论】:
-
在提问时,您需要提供 minimal reproducible example: (1) DDL 和示例数据填充,即 CREATE table(s) 加上 INSERT T-SQL 语句。 (2) 您需要做什么,即逻辑和您的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上面 #1 中的示例数据。 (4) 您的 SQL Server 版本 (SELECT @@version;)。
-
我在哪里创建这个?
-
一种选择:dbfiddle.uk/-SXv3GHO
-
有没有更快的方法?是的绝对 - 修复你的设计 - 如果你的表至少是 1NF 你就不需要乱搞分裂字符串或循环;一个专栏应该总是包含单个原子值。
-
在 SQL Server 管理工作室 (SSMS) 中
标签: sql sql-server