实现查询序号中间隔的序号

业务表中有一列是序号列,由于修改删除的原因序号中有了不少间隔或中断,查询该列中的所有中间间隙序号,以及所有可用的序号,特写以下SQL语句来处理。

1.判断当前是否在在该临时表,有的话删除。(一般上执行完即删除该临时表,不需要执行)。

   if(object_id('tempdb..#temp_abc') is not null)  drop table #tem_abc

 

2.得到实际序号长度的所有序号列表到临时表中。

   select id=identity(bigint,1,1) into #temp_abc from (select top 99 a.name from syscolumns a cross join syscolumns b) t

    以上示例是借助系统表得到1到99的两位整数所有的值列表。

 

3.关联查询需要检查的表字段中对应的可以使用的所有序号(包括间隔序号)。

  select a.code from (select '290103'+right('00'+ltirm(id),2)   as code from #temp_abc) a left join 实时表tablename b on a.code=b.codeCol where b.codecol is null order by a.code

  以上示例是得到29010301--29010399所有序号列表,并查询实现业务中有该字段中没有使用过的所用序号值。如果只是查询所有间隔值,加上实现业务表字段的最大值条件即可。

4.合并执行以上三个语句,得到最后的可用序号列表值。

exec ('语句1  语句2 语句3')   即可。3各语句中的 ' 需要用 '' 替换一下。

 

 

posted @ 2012-08-20 09:45  园封记忆  阅读(360)  评论(0编辑  收藏  举报